On Friday, 13 July 2018 at 11:04:40 UTC, Piotr Mitana wrote:
This code:
import std.stdio;
class X1 {}
class X2 : X1
{
void run() @safe
{
writeln("DONE");
}
}
void main() @safe
{
X1 x1 = new X1;
X2 x2 = cast(X2) x1;
x2.run();
}
is obviously wrong gets killed by OS's signal. Why is it @safe?
I thought @safe should prevent such errors as well.
I suppose this is another good example of how casting can be
dangerous?
E.g. also:
immutable int i = 3;
int* j = cast(int*)&i;
assert(i == 3);
*j = 4;
assert(j == &i); // data occupies same address space
assert(i == 3 && *j == 4); // yet the values differ