Sun, 08 Mar 2009 13:01:27 -0200, Ary Borenszweig wrote: > As I see it, the cast should fail saying "can't cast a to invariant > because a is mutable", because otherwise you are producing a behaviour > that doesn't match what the code says. > > In: > > char c; > int* p = cast(int*)&c; > *p = 5; > > there's nothing wrong about the cast because a char can be viewed as an > int. But a mutable data cannot be seen as immutable.
It's not interpreting char as int. It's interpreting c and part of return address as an int on x86 essentially corrupting stack. Or gets an unaligned access hardware exception. Or whatever. It's anything but a correct code. It's exactly the same issue as casting mutable to immutable: you're abusing the power the compiler gave you. Though I agree that the line between safe and unsafe casts is rather subtle.