This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: bug in library standard 23.2.1.3/4
- From: "Chris Jefferson" <chris at bubblescope dot net>
- To: "Steve LoBasso" <slobasso at yahoo dot com>
- Cc: libstdc++ at gcc dot gnu dot org
- Date: Thu, 15 Feb 2007 19:27:11 +0000
- Subject: Re: bug in library standard 23.2.1.3/4
- References: <20070215191211.85875.qmail@web51502.mail.yahoo.com>
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