This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: bug in library standard 23.2.1.3/4


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]