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.