On 02/03/2016 02:31 AM, bubbasaur wrote: > import std.stdio; > > struct Data { int x; } > auto func1(Data* d) { return d.x; } > auto func2(const(Data)* d) { return d.x; } > auto func3(immutable(Data)* d) { return d.x; } > > void main() { > Data d; > auto value1 = d.x*func1(&d) + d.x; > auto value2 = d.x*func2(&d) + d.x; > auto value3 = d.x*func3(cast(immutable)&d) + d.x; > d.x++; > writeln(d.x++); > } > > Functions 2 and 3 are acting in the same way and different from what you > said I can change the d.x in main.
Casting immutable and violating it is undefined behavior and once you do it all bets are off - compiler is even allowed to attempt formatting your hard drive when compiling this program :) The fact DMD doesn't do anything scary right now when you do it is a mere coincidence and may change in any release with no notice.