On Tuesday, 24 January 2017 at 11:32:47 UTC, TheFlyingFiddle wrote:
On Tuesday, 24 January 2017 at 11:28:17 UTC, Atila Neves wrote:
void main() {
    foo;
}

void foo() @safe {
    int[] array;
    auto ptr = array.ptr;
}


foo.d(7): Deprecation: array.ptr cannot be used in @safe code, use &array[0] instead


&array[0] is incredibly ugly and feels like an unnecessary hack, and I'm wondering why it's @safe.

Atila

Just a speculative guess.

unittest @safe
{
   int[] array;

   auto ptr  = array.ptr; //could be null
   auto ptr2 = &array[0]; //Does a bounds check?
   auto ptr3 = &array[5]; //Should do a bounds check.
}

&array[5] makes sense to bounds check, and I guess then the issue is I could instead do `array.ptr + 5` which would be bad. But it's still annoying to have to do &array[0] just to pass it to a C function, since `my_c_func(array.ptr)` isn't going to screw up anything.

BTW, in that example above array.ptr is null even though array is null. It doesn't crash.

Atila



Reply via email to