On 04/18/2012 08:45 PM, Brad Anderson wrote:
> On Thursday, 19 April 2012 at 03:37:00 UTC, bearophile wrote:
>> Brad Anderson:
>>> You can popFront() for as long as you want well passed the length.
>>> Obviously popping off the front of a zero length range isn't valid
>>> but I would have expected a range violation to occur rather than it
>>> to silently continuing the series with a wrapped around length.

I agree. I think it is just an oversight in iota()'s general implementation because its floating point specialization does have an assert check in popFront():

import std.range;

void main()
{
    auto r = iota(1.0); // <-- note 'double' type
    r.popFront();
    r.popFront();       // <-- assertion failure
}

>> I think it's a matter of design and it's a matter of having an
>> alternative Phobos release that contains asserts too. Adding the test
>> slows down something (iota) that must be as fast as possible. And
>> currently asserts are removed from the compiled Phobos...
>>
>> Bye,
>> bearophile
>
> Since iota is a template doesn't that mean it's not in phobos.lib but
> rather generated and built into my application? I'm not compiling in
> release mode so I would think any bounds checking it had would remain (I
> haven't yet looked at the source to see if there are any checks). I can
> definitely see stripping any bounds checking from a release build, of
> course.

I think this warrants an enhancement request. Thank you. :)

>
> Doing this same thing to a slice of an array does throw a Range
> Violation exception in release (and asserts in debug).
>
> Regards,
> Brad Anderson

Ali

Reply via email to