--------
nothrow void foo1(int[] a)
{
    foreach(i; 0..10)
    {
        a[i]  = 5;
        a[i] += 5;
    }
}

nothrow void foo2(int[] a) //10
{
    a[0..10]  = 5;  //12
    a[0..10] += 5;  //13
}
--------
main.d(13): Error: _arrayExpSliceAddass_i is not nothrow
main.d(10): Error: function main.foo2 'foo2' is nothrow yet may throw
--------

Making an out of range call in foo2 (after removing nothrow) throws an _ERROR_ in both line 12 and 13 (if commenting 12):
core.exception.RangeError@main(12): Range violation
core.exception.RangeError@main(13): Range violation
Is there any situation where it actually *could* throw an exception?

This is a bug? I did not find any entries in Bug report. Should I report this?

I need to make the above call in a nothrow function. Is there any way to make it work, without any run-time cost?

Reply via email to