The program below should print nothing. For me, it prints "1".
When erasing at the beginning or the end of a deque, the only iterators
to be invalidated are those of elements being erased. All others, and
in particular end(), should remain valid. (I am fairly certain that the
standard didn't mean to keep end() valid, but that's what it says.)
#include <iostream>
#include <deque>
int
main ()
{
std::deque<int> d;
d.resize (1, 1);
std::deque<int>::iterator the_end = d.end ();
d.erase (d.begin (), the_end);
for (std::deque<int>::iterator i = d.begin ();
i != the_end;
++i)
std::cerr << *i << std::endl;
return 0;
}
--
Summary: deque::erase invalidates end()
Product: gcc
Version: 4.3.1
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: terra at gnome dot org
GCC target triplet: x86_64-suse-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39547