Commit 932b6508 by Paolo Carlini Committed by Paolo Carlini

PR libstdc++/41975, DR 579

2010-02-11  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/41975, DR 579
	* include/bits/hashtable.h (_Hashtable<>::_M_erase_node): Remove.
	(erase(const_iterator), erase(const_iterator, const_iterator)):
	Change return type to void.
	* include/debug/unordered_map: Adjust.
	* include/debug/unordered_set: Likewise.
	* testsuite/util/exception/safety.h: Likewise.
	* testsuite/23_containers/unordered_map/erase/1.cc: Likewise.
	* testsuite/23_containers/unordered_map/erase/24061-map.cc: Likewise.
	* testsuite/23_containers/unordered_set/erase/1.cc:  Likewise.
	* testsuite/23_containers/unordered_set/erase/24061-map.cc: Likewise.
	* testsuite/23_containers/unordered_multimap/erase/1.cc:  Likewise.
	* testsuite/23_containers/unordered_multimap/erase/24061-map.cc:
	Likewise.
	* testsuite/23_containers/unordered_multiset/erase/1.cc:  Likewise.
	* testsuite/23_containers/unordered_multiset/erase/24061-map.cc:
	Likewise.

From-SVN: r156705
parent 6d892147
2010-02-11 Paolo Carlini <paolo.carlini@oracle.com> 2010-02-11 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/41975, DR 579
* include/bits/hashtable.h (_Hashtable<>::_M_erase_node): Remove.
(erase(const_iterator), erase(const_iterator, const_iterator)):
Change return type to void.
* include/debug/unordered_map: Adjust.
* include/debug/unordered_set: Likewise.
* testsuite/util/exception/safety.h: Likewise.
* testsuite/23_containers/unordered_map/erase/1.cc: Likewise.
* testsuite/23_containers/unordered_map/erase/24061-map.cc: Likewise.
* testsuite/23_containers/unordered_set/erase/1.cc: Likewise.
* testsuite/23_containers/unordered_set/erase/24061-map.cc: Likewise.
* testsuite/23_containers/unordered_multimap/erase/1.cc: Likewise.
* testsuite/23_containers/unordered_multimap/erase/24061-map.cc:
Likewise.
* testsuite/23_containers/unordered_multiset/erase/1.cc: Likewise.
* testsuite/23_containers/unordered_multiset/erase/24061-map.cc:
Likewise.
2010-02-11 Paolo Carlini <paolo.carlini@oracle.com>
* config/abi/pre/gnu.ver: Avoid exporting inadvertently * config/abi/pre/gnu.ver: Avoid exporting inadvertently
std::nested_exception symbols at GLIBCXX_3.4. std::nested_exception symbols at GLIBCXX_3.4.
......
...@@ -385,9 +385,6 @@ namespace std ...@@ -385,9 +385,6 @@ namespace std
iterator iterator
_M_insert(const value_type&, std::false_type); _M_insert(const value_type&, std::false_type);
void
_M_erase_node(_Node*, _Node**);
public: public:
// Insert and erase // Insert and erase
_Insert_Return_Type _Insert_Return_Type
...@@ -407,13 +404,13 @@ namespace std ...@@ -407,13 +404,13 @@ namespace std
insert(initializer_list<value_type> __l) insert(initializer_list<value_type> __l)
{ this->insert(__l.begin(), __l.end()); } { this->insert(__l.begin(), __l.end()); }
iterator void
erase(const_iterator); erase(const_iterator);
size_type size_type
erase(const key_type&); erase(const key_type&);
iterator void
erase(const_iterator, const_iterator); erase(const_iterator, const_iterator);
void void
...@@ -977,34 +974,6 @@ namespace std ...@@ -977,34 +974,6 @@ namespace std
return iterator(__new_node, _M_buckets + __n); return iterator(__new_node, _M_buckets + __n);
} }
// For erase(iterator) and erase(const_iterator).
template<typename _Key, typename _Value,
typename _Allocator, typename _ExtractKey, typename _Equal,
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
bool __chc, bool __cit, bool __uk>
void
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
_M_erase_node(_Node* __p, _Node** __b)
{
_Node* __cur = *__b;
if (__cur == __p)
*__b = __cur->_M_next;
else
{
_Node* __next = __cur->_M_next;
while (__next != __p)
{
__cur = __next;
__next = __cur->_M_next;
}
__cur->_M_next = __next->_M_next;
}
_M_deallocate_node(__p);
--_M_element_count;
}
template<typename _Key, typename _Value, template<typename _Key, typename _Value,
typename _Allocator, typename _ExtractKey, typename _Equal, typename _Allocator, typename _ExtractKey, typename _Equal,
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
...@@ -1030,17 +999,30 @@ namespace std ...@@ -1030,17 +999,30 @@ namespace std
typename _Allocator, typename _ExtractKey, typename _Equal, typename _Allocator, typename _ExtractKey, typename _Equal,
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
bool __chc, bool __cit, bool __uk> bool __chc, bool __cit, bool __uk>
typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, void
_H1, _H2, _Hash, _RehashPolicy,
__chc, __cit, __uk>::iterator
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
erase(const_iterator __it) erase(const_iterator __it)
{ {
iterator __result(__it._M_cur_node, __it._M_cur_bucket); _Node* __p = __it._M_cur_node;
++__result; _Node** __b = __it._M_cur_bucket;
_M_erase_node(__it._M_cur_node, __it._M_cur_bucket);
return __result; _Node* __cur = *__b;
if (__cur == __p)
*__b = __cur->_M_next;
else
{
_Node* __next = __cur->_M_next;
while (__next != __p)
{
__cur = __next;
__next = __cur->_M_next;
}
__cur->_M_next = __next->_M_next;
}
_M_deallocate_node(__p);
--_M_element_count;
} }
template<typename _Key, typename _Value, template<typename _Key, typename _Value,
...@@ -1102,17 +1084,17 @@ namespace std ...@@ -1102,17 +1084,17 @@ namespace std
typename _Allocator, typename _ExtractKey, typename _Equal, typename _Allocator, typename _ExtractKey, typename _Equal,
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy, typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
bool __chc, bool __cit, bool __uk> bool __chc, bool __cit, bool __uk>
typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, void
_H1, _H2, _Hash, _RehashPolicy,
__chc, __cit, __uk>::iterator
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal, _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
erase(const_iterator __first, const_iterator __last) erase(const_iterator __first, const_iterator __last)
{ {
while (__first != __last) if (__first == begin() && __last == end())
__first = this->erase(__first); clear();
return iterator(__last._M_cur_node, __last._M_cur_bucket); else
} while (__first != __last)
erase(__first++);
}
template<typename _Key, typename _Value, template<typename _Key, typename _Value,
typename _Allocator, typename _ExtractKey, typename _Equal, typename _Allocator, typename _ExtractKey, typename _Equal,
......
...@@ -243,25 +243,24 @@ namespace __debug ...@@ -243,25 +243,24 @@ namespace __debug
return __ret; return __ret;
} }
iterator void
erase(const_iterator __it) erase(const_iterator __it)
{ {
__glibcxx_check_erase(__it); __glibcxx_check_erase(__it);
__it._M_invalidate(); __it._M_invalidate();
return iterator(_Base::erase(__it.base()), this); _Base::erase(__it.base());
} }
iterator void
erase(const_iterator __first, const_iterator __last) erase(const_iterator __first, const_iterator __last)
{ {
__glibcxx_check_erase_range(__first, __last); __glibcxx_check_erase_range(__first, __last);
for (const_iterator __tmp = __first; __tmp != __last;) for (const_iterator __tmp = __first; __tmp != __last;)
{ {
const_iterator __victim = __tmp++; const_iterator __victim = __tmp++;
__victim._M_invalidate(); __victim._M_invalidate();
} }
return iterator(_Base::erase(__first.base(), _Base::erase(__first.base(), __last.base());
__last.base()), this);
} }
_Base& _Base&
...@@ -480,25 +479,24 @@ namespace __debug ...@@ -480,25 +479,24 @@ namespace __debug
return __ret; return __ret;
} }
iterator void
erase(const_iterator __it) erase(const_iterator __it)
{ {
__glibcxx_check_erase(__it); __glibcxx_check_erase(__it);
__it._M_invalidate(); __it._M_invalidate();
return iterator(_Base::erase(__it.base()), this); _Base::erase(__it.base());
} }
iterator void
erase(const_iterator __first, const_iterator __last) erase(const_iterator __first, const_iterator __last)
{ {
__glibcxx_check_erase_range(__first, __last); __glibcxx_check_erase_range(__first, __last);
for (const_iterator __tmp = __first; __tmp != __last;) for (const_iterator __tmp = __first; __tmp != __last;)
{ {
const_iterator __victim = __tmp++; const_iterator __victim = __tmp++;
__victim._M_invalidate(); __victim._M_invalidate();
} }
return iterator(_Base::erase(__first.base(), _Base::erase(__first.base(), __last.base());
__last.base()), this);
} }
_Base& _Base&
......
...@@ -243,25 +243,24 @@ namespace __debug ...@@ -243,25 +243,24 @@ namespace __debug
return __ret; return __ret;
} }
iterator void
erase(const_iterator __it) erase(const_iterator __it)
{ {
__glibcxx_check_erase(__it); __glibcxx_check_erase(__it);
__it._M_invalidate(); __it._M_invalidate();
return iterator(_Base::erase(__it.base()), this); _Base::erase(__it.base());
} }
iterator void
erase(const_iterator __first, const_iterator __last) erase(const_iterator __first, const_iterator __last)
{ {
__glibcxx_check_erase_range(__first, __last); __glibcxx_check_erase_range(__first, __last);
for (const_iterator __tmp = __first; __tmp != __last;) for (const_iterator __tmp = __first; __tmp != __last;)
{ {
const_iterator __victim = __tmp++; const_iterator __victim = __tmp++;
__victim._M_invalidate(); __victim._M_invalidate();
} }
return iterator(_Base::erase(__first.base(), _Base::erase(__first.base(), __last.base());
__last.base()), this);
} }
_Base& _Base&
...@@ -478,25 +477,24 @@ namespace __debug ...@@ -478,25 +477,24 @@ namespace __debug
return __ret; return __ret;
} }
iterator void
erase(const_iterator __it) erase(const_iterator __it)
{ {
__glibcxx_check_erase(__it); __glibcxx_check_erase(__it);
__it._M_invalidate(); __it._M_invalidate();
return iterator(_Base::erase(__it.base()), this); _Base::erase(__it.base());
} }
iterator void
erase(const_iterator __first, const_iterator __last) erase(const_iterator __first, const_iterator __last)
{ {
__glibcxx_check_erase_range(__first, __last); __glibcxx_check_erase_range(__first, __last);
for (const_iterator __tmp = __first; __tmp != __last;) for (const_iterator __tmp = __first; __tmp != __last;)
{ {
const_iterator __victim = __tmp++; const_iterator __victim = __tmp++;
__victim._M_invalidate(); __victim._M_invalidate();
} }
return iterator(_Base::erase(__first.base(), _Base::erase(__first.base(), __last.base());
__last.base()), this);
} }
_Base& _Base&
......
...@@ -113,7 +113,7 @@ void test01() ...@@ -113,7 +113,7 @@ void test01()
VERIFY( m1.size() == 2 ); VERIFY( m1.size() == 2 );
VERIFY( ++it10 == m1.end() ); VERIFY( ++it10 == m1.end() );
VERIFY( m1.erase(m1.begin()) != m1.end() ); m1.erase(m1.begin());
VERIFY( m1.size() == 1 ); VERIFY( m1.size() == 1 );
VERIFY( m1.begin() == it11 ); VERIFY( m1.begin() == it11 );
......
...@@ -51,10 +51,8 @@ void test01() ...@@ -51,10 +51,8 @@ void test01()
++it1; ++it1;
iterator it2 = it1; iterator it2 = it1;
++it2; ++it2;
iterator it3 = m1.erase(it1); m1.erase(it1);
VERIFY( m1.size() == 9 ); VERIFY( m1.size() == 9 );
VERIFY( it3 == it2 );
VERIFY( *it3 == *it2 );
iterator it4 = m1.begin(); iterator it4 = m1.begin();
++it4; ++it4;
...@@ -63,10 +61,8 @@ void test01() ...@@ -63,10 +61,8 @@ void test01()
iterator it5 = it4; iterator it5 = it4;
++it5; ++it5;
++it5; ++it5;
iterator it6 = m1.erase(it4, it5); m1.erase(it4, it5);
VERIFY( m1.size() == 7 ); VERIFY( m1.size() == 7 );
VERIFY( it6 == it5 );
VERIFY( *it6 == *it5 );
const_iterator it7 = m1.begin(); const_iterator it7 = m1.begin();
++it7; ++it7;
...@@ -74,10 +70,8 @@ void test01() ...@@ -74,10 +70,8 @@ void test01()
++it7; ++it7;
const_iterator it8 = it7; const_iterator it8 = it7;
++it8; ++it8;
const_iterator it9 = m1.erase(it7); m1.erase(it7);
VERIFY( m1.size() == 6 ); VERIFY( m1.size() == 6 );
VERIFY( it9 == it8 );
VERIFY( *it9 == *it8 );
const_iterator it10 = m1.begin(); const_iterator it10 = m1.begin();
++it10; ++it10;
...@@ -86,16 +80,11 @@ void test01() ...@@ -86,16 +80,11 @@ void test01()
++it11; ++it11;
++it11; ++it11;
++it11; ++it11;
const_iterator it12 = m1.erase(it10, it11); m1.erase(it10, it11);
VERIFY( m1.size() == 2 ); VERIFY( m1.size() == 2 );
VERIFY( it12 == it11 );
VERIFY( *it12 == *it11 );
VERIFY( ++it12 == m1.end() );
iterator it13 = m1.erase(m1.begin(), m1.end()); m1.erase(m1.begin(), m1.end());
VERIFY( m1.size() == 0 ); VERIFY( m1.size() == 0 );
VERIFY( it13 == it12 );
VERIFY( it13 == m1.begin() );
} }
int main() int main()
......
...@@ -113,7 +113,7 @@ void test01() ...@@ -113,7 +113,7 @@ void test01()
VERIFY( mm1.size() == 2 ); VERIFY( mm1.size() == 2 );
VERIFY( ++it10 == mm1.end() ); VERIFY( ++it10 == mm1.end() );
VERIFY( mm1.erase(mm1.begin()) != mm1.end() ); mm1.erase(mm1.begin());
VERIFY( mm1.size() == 1 ); VERIFY( mm1.size() == 1 );
VERIFY( mm1.begin() == it11 ); VERIFY( mm1.begin() == it11 );
......
...@@ -55,10 +55,8 @@ void test01() ...@@ -55,10 +55,8 @@ void test01()
++it1; ++it1;
iterator it2 = it1; iterator it2 = it1;
++it2; ++it2;
iterator it3 = mm1.erase(it1); mm1.erase(it1);
VERIFY( mm1.size() == 12 ); VERIFY( mm1.size() == 12 );
VERIFY( it3 == it2 );
VERIFY( *it3 == *it2 );
iterator it4 = mm1.begin(); iterator it4 = mm1.begin();
++it4; ++it4;
...@@ -67,10 +65,8 @@ void test01() ...@@ -67,10 +65,8 @@ void test01()
iterator it5 = it4; iterator it5 = it4;
++it5; ++it5;
++it5; ++it5;
iterator it6 = mm1.erase(it4, it5); mm1.erase(it4, it5);
VERIFY( mm1.size() == 10 ); VERIFY( mm1.size() == 10 );
VERIFY( it6 == it5 );
VERIFY( *it6 == *it5 );
const_iterator it7 = mm1.begin(); const_iterator it7 = mm1.begin();
++it7; ++it7;
...@@ -78,10 +74,8 @@ void test01() ...@@ -78,10 +74,8 @@ void test01()
++it7; ++it7;
const_iterator it8 = it7; const_iterator it8 = it7;
++it8; ++it8;
const_iterator it9 = mm1.erase(it7); mm1.erase(it7);
VERIFY( mm1.size() == 9 ); VERIFY( mm1.size() == 9 );
VERIFY( it9 == it8 );
VERIFY( *it9 == *it8 );
const_iterator it10 = mm1.begin(); const_iterator it10 = mm1.begin();
++it10; ++it10;
...@@ -90,15 +84,11 @@ void test01() ...@@ -90,15 +84,11 @@ void test01()
++it11; ++it11;
++it11; ++it11;
++it11; ++it11;
const_iterator it12 = mm1.erase(it10, it11); mm1.erase(it10, it11);
VERIFY( mm1.size() == 5 ); VERIFY( mm1.size() == 5 );
VERIFY( it12 == it11 );
VERIFY( *it12 == *it11 );
iterator it13 = mm1.erase(mm1.begin(), mm1.end()); mm1.erase(mm1.begin(), mm1.end());
VERIFY( mm1.size() == 0 ); VERIFY( mm1.size() == 0 );
VERIFY( it13 == mm1.end() );
VERIFY( it13 == mm1.begin() );
} }
int main() int main()
......
...@@ -112,7 +112,7 @@ void test01() ...@@ -112,7 +112,7 @@ void test01()
VERIFY( ms1.size() == 2 ); VERIFY( ms1.size() == 2 );
VERIFY( ++it10 == ms1.end() ); VERIFY( ++it10 == ms1.end() );
VERIFY( ms1.erase(ms1.begin()) != ms1.end() ); ms1.erase(ms1.begin());
VERIFY( ms1.size() == 1 ); VERIFY( ms1.size() == 1 );
VERIFY( ms1.begin() == it11 ); VERIFY( ms1.begin() == it11 );
......
...@@ -54,10 +54,8 @@ void test01() ...@@ -54,10 +54,8 @@ void test01()
++it1; ++it1;
iterator it2 = it1; iterator it2 = it1;
++it2; ++it2;
iterator it3 = ms1.erase(it1); ms1.erase(it1);
VERIFY( ms1.size() == 12 ); VERIFY( ms1.size() == 12 );
VERIFY( it3 == it2 );
VERIFY( *it3 == *it2 );
iterator it4 = ms1.begin(); iterator it4 = ms1.begin();
++it4; ++it4;
...@@ -66,10 +64,8 @@ void test01() ...@@ -66,10 +64,8 @@ void test01()
iterator it5 = it4; iterator it5 = it4;
++it5; ++it5;
++it5; ++it5;
iterator it6 = ms1.erase(it4, it5); ms1.erase(it4, it5);
VERIFY( ms1.size() == 10 ); VERIFY( ms1.size() == 10 );
VERIFY( it6 == it5 );
VERIFY( *it6 == *it5 );
const_iterator it7 = ms1.begin(); const_iterator it7 = ms1.begin();
++it7; ++it7;
...@@ -77,10 +73,8 @@ void test01() ...@@ -77,10 +73,8 @@ void test01()
++it7; ++it7;
const_iterator it8 = it7; const_iterator it8 = it7;
++it8; ++it8;
const_iterator it9 = ms1.erase(it7); ms1.erase(it7);
VERIFY( ms1.size() == 9 ); VERIFY( ms1.size() == 9 );
VERIFY( it9 == it8 );
VERIFY( *it9 == *it8 );
const_iterator it10 = ms1.begin(); const_iterator it10 = ms1.begin();
++it10; ++it10;
...@@ -89,15 +83,11 @@ void test01() ...@@ -89,15 +83,11 @@ void test01()
++it11; ++it11;
++it11; ++it11;
++it11; ++it11;
const_iterator it12 = ms1.erase(it10, it11); ms1.erase(it10, it11);
VERIFY( ms1.size() == 5 ); VERIFY( ms1.size() == 5 );
VERIFY( it12 == it11 );
VERIFY( *it12 == *it11 );
iterator it13 = ms1.erase(ms1.begin(), ms1.end()); ms1.erase(ms1.begin(), ms1.end());
VERIFY( ms1.size() == 0 ); VERIFY( ms1.size() == 0 );
VERIFY( it13 == ms1.end() );
VERIFY( it13 == ms1.begin() );
} }
int main() int main()
......
...@@ -112,7 +112,7 @@ void test01() ...@@ -112,7 +112,7 @@ void test01()
VERIFY( s1.size() == 2 ); VERIFY( s1.size() == 2 );
VERIFY( ++it10 == s1.end() ); VERIFY( ++it10 == s1.end() );
VERIFY( s1.erase(s1.begin()) != s1.end() ); s1.erase(s1.begin());
VERIFY( s1.size() == 1 ); VERIFY( s1.size() == 1 );
VERIFY( s1.begin() == it11 ); VERIFY( s1.begin() == it11 );
......
...@@ -50,10 +50,8 @@ void test01() ...@@ -50,10 +50,8 @@ void test01()
++it1; ++it1;
iterator it2 = it1; iterator it2 = it1;
++it2; ++it2;
iterator it3 = s1.erase(it1); s1.erase(it1);
VERIFY( s1.size() == 9 ); VERIFY( s1.size() == 9 );
VERIFY( it3 == it2 );
VERIFY( *it3 == *it2 );
iterator it4 = s1.begin(); iterator it4 = s1.begin();
++it4; ++it4;
...@@ -62,10 +60,8 @@ void test01() ...@@ -62,10 +60,8 @@ void test01()
iterator it5 = it4; iterator it5 = it4;
++it5; ++it5;
++it5; ++it5;
iterator it6 = s1.erase(it4, it5); s1.erase(it4, it5);
VERIFY( s1.size() == 7 ); VERIFY( s1.size() == 7 );
VERIFY( it6 == it5 );
VERIFY( *it6 == *it5 );
const_iterator it7 = s1.begin(); const_iterator it7 = s1.begin();
++it7; ++it7;
...@@ -73,10 +69,8 @@ void test01() ...@@ -73,10 +69,8 @@ void test01()
++it7; ++it7;
const_iterator it8 = it7; const_iterator it8 = it7;
++it8; ++it8;
const_iterator it9 = s1.erase(it7); s1.erase(it7);
VERIFY( s1.size() == 6 ); VERIFY( s1.size() == 6 );
VERIFY( it9 == it8 );
VERIFY( *it9 == *it8 );
const_iterator it10 = s1.begin(); const_iterator it10 = s1.begin();
++it10; ++it10;
...@@ -85,16 +79,11 @@ void test01() ...@@ -85,16 +79,11 @@ void test01()
++it11; ++it11;
++it11; ++it11;
++it11; ++it11;
const_iterator it12 = s1.erase(it10, it11); s1.erase(it10, it11);
VERIFY( s1.size() == 2 ); VERIFY( s1.size() == 2 );
VERIFY( it12 == it11 );
VERIFY( *it12 == *it11 );
VERIFY( ++it12 == s1.end() );
iterator it13 = s1.erase(s1.begin(), s1.end()); s1.erase(s1.begin(), s1.end());
VERIFY( s1.size() == 0 ); VERIFY( s1.size() == 0 );
VERIFY( it13 == s1.end() );
VERIFY( it13 == s1.begin() );
} }
int main() int main()
......
...@@ -285,9 +285,9 @@ namespace __gnu_test ...@@ -285,9 +285,9 @@ namespace __gnu_test
typedef typename container_type::iterator iterator; typedef typename container_type::iterator iterator;
typedef typename container_type::const_iterator const_iterator; typedef typename container_type::const_iterator const_iterator;
iterator (container_type::* _F_erase_point)(const_iterator); void (container_type::* _F_erase_point)(const_iterator);
iterator (container_type::* _F_erase_range)(const_iterator, void (container_type::* _F_erase_range)(const_iterator,
const_iterator); const_iterator);
erase_base() erase_base()
: _F_erase_point(&container_type::erase), : _F_erase_point(&container_type::erase),
...@@ -304,9 +304,9 @@ namespace __gnu_test ...@@ -304,9 +304,9 @@ namespace __gnu_test
typedef typename container_type::iterator iterator; typedef typename container_type::iterator iterator;
typedef typename container_type::const_iterator const_iterator; typedef typename container_type::const_iterator const_iterator;
iterator (container_type::* _F_erase_point)(const_iterator); void (container_type::* _F_erase_point)(const_iterator);
iterator (container_type::* _F_erase_range)(const_iterator, void (container_type::* _F_erase_range)(const_iterator,
const_iterator); const_iterator);
erase_base() erase_base()
: _F_erase_point(&container_type::erase), : _F_erase_point(&container_type::erase),
...@@ -321,9 +321,9 @@ namespace __gnu_test ...@@ -321,9 +321,9 @@ namespace __gnu_test
typedef typename container_type::iterator iterator; typedef typename container_type::iterator iterator;
typedef typename container_type::const_iterator const_iterator; typedef typename container_type::const_iterator const_iterator;
iterator (container_type::* _F_erase_point)(const_iterator); void (container_type::* _F_erase_point)(const_iterator);
iterator (container_type::* _F_erase_range)(const_iterator, void (container_type::* _F_erase_range)(const_iterator,
const_iterator); const_iterator);
erase_base() erase_base()
: _F_erase_point(&container_type::erase), : _F_erase_point(&container_type::erase),
...@@ -338,9 +338,9 @@ namespace __gnu_test ...@@ -338,9 +338,9 @@ namespace __gnu_test
typedef typename container_type::iterator iterator; typedef typename container_type::iterator iterator;
typedef typename container_type::const_iterator const_iterator; typedef typename container_type::const_iterator const_iterator;
iterator (container_type::* _F_erase_point)(const_iterator); void (container_type::* _F_erase_point)(const_iterator);
iterator (container_type::* _F_erase_range)(const_iterator, void (container_type::* _F_erase_range)(const_iterator,
const_iterator); const_iterator);
erase_base() erase_base()
: _F_erase_point(&container_type::erase), : _F_erase_point(&container_type::erase),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment