Package: libstdc++5-3.3-dev
Version: 1:3.3-2
Severity: normal

...according to TC++PL 3rd ed, section 17.4.1.7, 
"Erasing end() is harmless."

but the following code either hangs or crashes when the end() iterator
is being passed to erase();

*** set_erase.cc
#include <set>
#include <map>
#include <cassert>

int 
main(int, char *[])
{
  std::set<int> s;

  s.insert (1); s.insert (2);
  s.insert (1); s.insert (2);

  assert (s.count (1) == 1);
  assert (s.count (2) == 1);

  s.erase (1);
  assert (s.count (1) == 0); assert (s.find (1) == s.end ());
  assert (s.count (2) == 1); assert (s.find (2) != s.end ());
  
  s.erase (s.find (2));
  assert (s.count (2) == 0); assert (s.find (2) == s.end ());

  s.erase (s.find (2)); // fails
  assert (s.count (2) == 0); assert (s.find (2) == s.end ());


  std::map<int,int> m;

  m[1] = 1;
  m[2] = 2;

  assert (m.count (2) != 0); assert (m.find (2) != m.end ());
  
  m.erase (m.find (2));
  assert (m.count (2) == 0); assert (m.find (2) == m.end ());

  m.erase (m.find (2)); // fails
  assert (m.count (2) == 0); assert (m.find (2) == m.end ());
}


-- System Information:
Debian Release: testing/unstable
Architecture: i386
Kernel: Linux lfdux.ifs.tuwien.ac.at 2.4.20-1-k7 #1 Sat Mar 22 15:17:52 EST 
2003 i686
Locale: LANG=C, LC_CTYPE=C

Versions of packages libstdc++5-3.3-dev depends on:
ii  g++-3.3                       1:3.3-2    The GNU C++ compiler
ii  gcc-3.3-base                  1:3.3-2    The GNU Compiler Collection (base 
ii  libc6-dev                     2.3.1-17   GNU C Library: Development Librari
ii  libstdc++5                    1:3.3-2    The GNU Standard C++ Library v3

-- no debconf information



Reply via email to