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

Reply via email to