On Wednesday, 10 February 2016 at 20:14:29 UTC, Chris Wright wrote:
@safe protects you from segmentation faults and reading and writing outside an allocated segment of memory. With array casts, @safety is assured

Yes, @safe protects from direct cast to/from ref types but there
still is a trick with T[] -> void[] -> T2[] cast:

import std.stdio;

int[] f(void[] a) @safe pure
{
    return cast(int[])a;
}

struct S
{
    int* a;
}

void main() @safe
{
    S[] a = new S[4];

    immutable b = a.f();
    writeln(b);
    a[0].a = new int;
    writeln(b);
    //b[0] = 0;
    //writeln(*a[0].a);

}

So no safety in this world.

Reply via email to