Unexpected behavior when casting away immutable

Mafi via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Sep 23 04:38:36 PDT 2015


On Wednesday, 23 September 2015 at 05:24:05 UTC, John Colvin 
wrote:
> On Wednesday, 23 September 2015 at 03:39:02 UTC, Mike Parker 
> wrote:
...
>>
>> ```
>> immutable int x = 10;
>> int* px = cast(int*)&x;
>> *px = 9;
>> writeln(x);
>> ```
>>
>> It prints 10, where I expected 9. This is on Windows. I'm 
>> curious if anyone knows why it happens.
>
> violating immutable is undefined behaviour, so the compiler is 
> technically speaking free to assume it never happens. At the 
> very least, neither snippet's result is guaranteed to show a 
> change or not. At the most, literally anything can happen.

In essence, this code snippet is even better than the OP expected 
in showing why you shouldn't cast away immutable.


More information about the Digitalmars-d-learn mailing list