bug in library standard 23.2.1.3/4

Chris Jefferson chris@bubblescope.net
Thu Feb 15 19:27:00 GMT 2007


On 15/02/07, Steve LoBasso <slobasso@yahoo.com> wrote:
> The standard states in 23.2.1.3/4:
>
> Effects: ... An erase at either end of the deque invalidates only the iterators and the references to the erased elements.
>
> This does not state that a previously copied value of end() will be invalidated, but it must be invalidated.
> Also, if a change to the standard is made, it should also consider the invalidation requirements of end() in the context of a container with only a single element when that element is erased.
>
> I have enclosed a code sample showing the problem.

I don't see a problem with this code. As you say, z has become
invalidated. However, according to the standard, acting on invalidated
iterators is undefined. The compiler isn't required to "clean up"
invalidated iterators, and in general doing so would be very
expensive.

> Also the debug deque container implementation doesn't handle this situation very gracefully.

This could be fixed. What do you mean "not gracefully"?

Chris



More information about the Libstdc++ mailing list