Derek Parnell wrote:
import std.stdio;
void main()
{
int [] a = new int [1];
a [0] = 1;
invariant (int) [] b = cast (invariant (int) []) a;
writef ("a=%s b=%s\n", a [0], b[0]);
a [0] += b [0];
writef ("a=%s b=%s\n", a [0], b[0]);
a [0] += b [0];
writef ("a=%s b=%s\n", a [0], b[0]);
}
The problem is that we have declared 'b' as invariant, but the program is
allowed to change it. That is the issue.
The following also compiles:
char c;
int* p = cast(int*)&c;
*p = 5;
and is clearly buggy code. Whenever you use a cast, the onus is on the
programmer to know what they are doing. The cast is an escape from the
typing system.