|
Boost Users : |
Subject: Re: [Boost-users] [Container] --begin() on empty deque crashes
From: TONGARI (tongari95_at_[hidden])
Date: 2013-01-20 00:19:22
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.
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