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.

Reply via email to