Slincing behaviour

Steven Schveighoffer schveiguy at yahoo.com
Fri Nov 11 13:42:28 PST 2011


On Fri, 11 Nov 2011 16:10:12 -0500, Simon <s.d.hammett at gmail.com> wrote:

> On 11/11/2011 19:04, Steven Schveighoffer wrote:
>> On Fri, 11 Nov 2011 14:01:42 -0500, Steven Schveighoffer
>> <schveiguy at yahoo.com> wrote:
>>
>>> There should be no bounds error in any case, an empty slice is valid.
>>
>> By "in any case" I meant in either debug or release mode.
>>
>> -Steve
>
> even when you index beyond the bounds of the slice?
>
> you may not actually be reading memory because it's zero length, but  
> it's still logically invalid; you've gone outside the valid range.

You are not reading beyond the valid range.  A zero-length slice is  
perfectly legal to point at the end of an array or other slice.  Reading  
any data from a zero-length slice will cause an out-of-bounds error in  
debug mode, because it has no elements.

> in vc9, if you increment an iterator beyond the valid range you get a  
> debug assert. that's caught quite a few bugs where I work when we  
> upgraded to vc9.

I think you are misunderstanding what the $ actually means.

It's the equivalent in C++ iterators to x.end.

The pair of iterators x.end, x.end is a valid range.  Going *beyond* x.end  
would be illegal.  But iterating *to* x.end is legal (which would be the  
equivalent of [$..$] range), and you will not be able to convince me that  
vc9 doesn't allow it.

-Steve


More information about the Digitalmars-d-learn mailing list