diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f21f4aec62e..f2d472fac07 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2011-02-07 Paolo Carlini + + PR libstdc++/47628 + * include/bits/stl_tree.h (_Rb_tree::erase(iterator), erase(iterator, + iterator)): Add back in C++03 mode. + * testsuite/23_containers/map/modifiers/erase/47628.cc: New. + * testsuite/23_containers/multimap/modifiers/erase/47628.cc: Likewise. + 2011-02-07 Benjamin Kosnik PR libstdc++/47560 try two diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h index 1960f9c8a45..85681d2da36 100644 --- a/libstdc++-v3/include/bits/stl_tree.h +++ b/libstdc++-v3/include/bits/stl_tree.h @@ -1,7 +1,7 @@ // RB tree implementation -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, -// 2009, 2010 +// 2009, 2010, 2011 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -761,6 +761,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __result._M_const_cast(); } #else + void + erase(iterator __position) + { _M_erase_aux(__position); } + void erase(const_iterator __position) { _M_erase_aux(__position); } @@ -778,6 +782,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __last._M_const_cast(); } #else + void + erase(iterator __first, iterator __last) + { _M_erase_aux(__first, __last); } + void erase(const_iterator __first, const_iterator __last) { _M_erase_aux(__first, __last); } diff --git a/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/47628.cc b/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/47628.cc new file mode 100644 index 00000000000..2769bcac2bf --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/47628.cc @@ -0,0 +1,45 @@ +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . +// + +// { dg-do compile } + +#include + +struct Key +{ + Key() { } + + Key(const Key&) { } + + template + Key(const T&) + { } + + bool operator<(const Key&) const; +}; + +typedef std::map Map; + +// libstdc++/47628 +void f() +{ + Map m; + m.insert(Map::value_type()); + Map::iterator i = m.begin(); + m.erase(i); +} diff --git a/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/47628.cc b/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/47628.cc new file mode 100644 index 00000000000..601b16b7d82 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/47628.cc @@ -0,0 +1,45 @@ +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . +// + +// { dg-do compile } + +#include + +struct Key +{ + Key() { } + + Key(const Key&) { } + + template + Key(const T&) + { } + + bool operator<(const Key&) const; +}; + +typedef std::multimap MMap; + +// libstdc++/47628 +void f() +{ + MMap mm; + mm.insert(MMap::value_type()); + MMap::iterator i = mm.begin(); + mm.erase(i); +}