Boost logo

Boost Users :

Subject: Re: [Boost-users] [Container] --begin() on empty deque crashes
From: TONGARI (tongari95_at_[hidden])
Date: 2013-01-20 00:23:16


2013/1/20 TONGARI <tongari95_at_[hidden]>

> 2013/1/20 Marshall Clow <mclow.lists_at_[hidden]>
>
>> On Jan 19, 2013, at 8:23 PM, TONGARI <tongari95_at_[hidden]> wrote:
>>
>> 2013/1/20 Ion Gaztañaga <igaztanaga_at_[hidden]>
>>
>>> El 19/01/2013 13:06, TONGARI escribió:
>>>
>>> Hi there,
>>>>
>>>> The code below would simply crash on g++ 4.7.1/MinGW with default
>>>> optimization level, it doesn't shown with -O/1/2/3
>>>> ------------------------------**----------
>>>> boost::container::deque<int> d;
>>>> --d.begin();
>>>> ------------------------------**----------
>>>>
>>>
>>> The problem is that decrementing a begin iterator is not a valid
>>> operator, since it would point out of the container.
>>>
>>
>> But wouldn't it be a valid operation as long as we don't dereference from
>> it?
>>
>>
>> I don't believe so.
>> If it was a pointer, then yes.
>>
>> The closest I could find in the standard was section 24.2.6 (talking
>> about bidirectional iterators), it says that a precondition for --r is:
>> there exists s such that r == ++s
>>
>
> OK, thanks.
> According to the requirement it's invalid indeed, I thought that we have
> ++end() a valid op so it must apply to --begin() as well, but that's not
> true.
>

Ah, wrong again, ++end() is invalid, sorry for the noise.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net