Boost logo

Boost Users :

Subject: Re: [Boost-users] [Container] --begin() on empty deque crashes
From: Marshall Clow (mclow.lists_at_[hidden])
Date: 2013-01-19 23:39:11


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

-- Marshall

Marshall Clow Idio Software <mailto:mclow.lists_at_[hidden]>

A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly moderated down to (-1, Flamebait).
        -- Yu Suzuki



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