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
This commit is contained in:
Paolo Carlini 2011-02-07 20:15:48 +00:00 committed by Paolo Carlini
parent 83296cd0f4
commit 03e38c1a18
4 changed files with 107 additions and 1 deletions

View File

@ -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

View File

@ -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); }

View File

@ -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);
}

View File

@ -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);
}