diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-02-07 20:15:48 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-02-07 20:15:48 +0000 |
commit | 03e38c1a18eb37aad31cc3cc9318eca50a8dff89 (patch) | |
tree | 6edbcdc84c4076d503eaf6809cfe46307d16c617 | |
parent | 83296cd0f41f505d6e0e56f28735e92c70925cbf (diff) | |
download | gcc-03e38c1a18eb37aad31cc3cc9318eca50a8dff89.zip gcc-03e38c1a18eb37aad31cc3cc9318eca50a8dff89.tar.gz gcc-03e38c1a18eb37aad31cc3cc9318eca50a8dff89.tar.bz2 |
re PR libstdc++/47628 (non-compliant C++0x erase methods on STL containers)
2011-02-07 Paolo Carlini <paolo.carlini@oracle.com>
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.
From-SVN: r169899
-rw-r--r-- | libstdc++-v3/ChangeLog | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_tree.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/map/modifiers/erase/47628.cc | 45 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/47628.cc | 45 |
4 files changed, 107 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f21f4ae..f2d472f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2011-02-07 Paolo Carlini <paolo.carlini@oracle.com> + + 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 <bkoz@redhat.com> PR libstdc++/47560 try two diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h index 1960f9c..85681d2 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 @@ -762,6 +762,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #else void + erase(iterator __position) + { _M_erase_aux(__position); } + + void erase(const_iterator __position) { _M_erase_aux(__position); } #endif @@ -779,6 +783,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #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); } #endif 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 0000000..2769bca --- /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 +// <http://www.gnu.org/licenses/>. +// + +// { dg-do compile } + +#include <map> + +struct Key +{ + Key() { } + + Key(const Key&) { } + + template<typename T> + Key(const T&) + { } + + bool operator<(const Key&) const; +}; + +typedef std::map<Key, int> 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 0000000..601b16b --- /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 +// <http://www.gnu.org/licenses/>. +// + +// { dg-do compile } + +#include <map> + +struct Key +{ + Key() { } + + Key(const Key&) { } + + template<typename T> + Key(const T&) + { } + + bool operator<(const Key&) const; +}; + +typedef std::multimap<Key, int> MMap; + +// libstdc++/47628 +void f() +{ + MMap mm; + mm.insert(MMap::value_type()); + MMap::iterator i = mm.begin(); + mm.erase(i); +} |