On 2011-04-03 04:10, simendsjo wrote:
>       int[] a = [1,2,3];
> 
>       int[4] b;
>       assert(b == [0,0,0,0]);
>       b = a[] * 3; // oops... a[] * 3 takes element outside a's bounds
>       assert(b[$-1] == 0); // fails.. last element is *(a.ptr+3) * 3

Array bounds checking is done on code which is not compiled with the -
noboundscheck flag and which is either not built with -release or is @safe.

I assume that you're not compiling with -noboundscheck (which turns off all 
array bounds checking). So, you're likely compiling with -release on code 
which isn't @safe. @system is the default, so unless you've marked your code 
@safe or you're not compiling with -release, I wouldn't expect there to be any 
bounds checking. If you want to guarantee that there's always bounds checking, 
then you need to mark your code @safe and not use -noboundscheck. However, 
given how little of Phobos is currently @safe or @trusted, odds are that 
trying to mark your code @safe will get _really_ annoying at this point. And 
to fix that, we'd likely need conditional @safe and conditional @trusted for 
the same reasons that we need conditional pure. And those haven't been taken 
care of yet (there isn't even an official plan to as far as I know - though 
hopefully there will be).

- Jonathan M Davis

Reply via email to