summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/include/debug
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-05-10 15:18:33 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2013-05-10 15:18:33 +0000
commit6b0e18ca48bb4b4c01e7b5be2b98849943fdcf91 (patch)
tree733216f9d05ef2101674b95a354adc2ed369f93c /libstdc++-v3/include/debug
parent82b24465847d7b64dc4b01a6e95eb74621546bfb (diff)
downloadppe42-gcc-6b0e18ca48bb4b4c01e7b5be2b98849943fdcf91.tar.gz
ppe42-gcc-6b0e18ca48bb4b4c01e7b5be2b98849943fdcf91.zip
2013-05-10 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/54577 * include/bits/stl_deque.h (erase): Fix signatures in C++11 mode. (_Deque_iterator<>::_M_const_cast): Add. (deque<>::_M_erase): Declare. * include/bits/deque.tcc: ... and define. * include/bits/stl_list.h (erase): Fix signatures in C++11 mode. (_List_const_iterator<>::_M_const_cast): Add. * include/bits/list.tcc (erase (iterator)): Fix. * include/bits/stl_iterator.h (__normal_iterator<>::_M_const_cast): Add; include <ext/cast.h>. * include/bits/stl_vector.h (erase): Fix signatures in C++11 mode. (vector<>::_M_erase): Declare. * include/bits/stl_bvector.h: Likewise. * include/bits/vector.tcc (vector<>::_M_erase): Define. * include/ext/vstring.h (erase): Fix signatures in C++11 mode. * include/debug/deque: Adjust. * include/debug/list: Likewise. * include/debug/vector: Likewise. * include/profile/deque: Likewise. * include/profile/list: Likewise. * include/profile/vector: Likewise. * testsuite/util/exception/safety.h (erase_base<deque>, erase_base<deque>, erase_base<vector>): Remove. (erase_base<__versa_string>): Update. * testsuite/ext/vstring/modifiers/char/54577.cc: New. * testsuite/ext/vstring/modifiers/wchar_t/54577.cc: Likewise. * testsuite/23_containers/deque/modifiers/erase/54577.cc: Likewise. * testsuite/23_containers/list/modifiers/erase/54577.cc: Likewise. * testsuite/23_containers/vector/bool/modifiers/erase/54577.cc: Likewise. * testsuite/23_containers/vector/modifiers/erase/54577.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Adjust dg-error line numbers. * testsuite/23_containers/deque/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/list/requirements/dr438/ insert_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@198790 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/debug')
-rw-r--r--libstdc++-v3/include/debug/deque22
-rw-r--r--libstdc++-v3/include/debug/list23
-rw-r--r--libstdc++-v3/include/debug/vector12
3 files changed, 49 insertions, 8 deletions
diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque
index 8442ec19b7b..2ac6d252e1d 100644
--- a/libstdc++-v3/include/debug/deque
+++ b/libstdc++-v3/include/debug/deque
@@ -456,11 +456,19 @@ namespace __debug
}
iterator
- erase(iterator __position)
+#if __cplusplus >= 201103L
+ erase(const_iterator __position)
+#else
+ erase(iterator __position)
+#endif
{
__glibcxx_check_erase(__position);
+#if __cplusplus >= 201103L
+ _Base_const_iterator __victim = __position.base();
+#else
_Base_iterator __victim = __position.base();
- if (__victim == _Base::begin() || __victim == _Base::end()-1)
+#endif
+ if (__victim == _Base::begin() || __victim == _Base::end() - 1)
{
this->_M_invalidate_if(_Equal(__victim));
return iterator(_Base::erase(__victim), this);
@@ -474,19 +482,27 @@ namespace __debug
}
iterator
+#if __cplusplus >= 201103L
+ erase(const_iterator __first, const_iterator __last)
+#else
erase(iterator __first, iterator __last)
+#endif
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 151. can't currently clear() empty container
__glibcxx_check_erase_range(__first, __last);
if (__first.base() == __last.base())
+#if __cplusplus >= 201103L
+ return iterator(__first.base()._M_const_cast(), this);
+#else
return __first;
+#endif
else if (__first.base() == _Base::begin()
|| __last.base() == _Base::end())
{
this->_M_detach_singular();
- for (_Base_iterator __position = __first.base();
+ for (_Base_const_iterator __position = __first.base();
__position != __last.base(); ++__position)
{
this->_M_invalidate_if(_Equal(__position));
diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list
index 8fcc5bfe86a..9bc47124f39 100644
--- a/libstdc++-v3/include/debug/list
+++ b/libstdc++-v3/include/debug/list
@@ -431,35 +431,48 @@ namespace __debug
private:
_Base_iterator
+#if __cplusplus >= 201103L
+ _M_erase(_Base_const_iterator __position)
+#else
_M_erase(_Base_iterator __position)
+#endif
{
this->_M_invalidate_if(_Equal(__position));
return _Base::erase(__position);
}
+
public:
iterator
+#if __cplusplus >= 201103L
+ erase(const_iterator __position)
+#else
erase(iterator __position)
+#endif
{
__glibcxx_check_erase(__position);
return iterator(_M_erase(__position.base()), this);
}
iterator
- erase(iterator __position, iterator __last)
+#if __cplusplus >= 201103L
+ erase(const_iterator __first, const_iterator __last)
+#else
+ erase(iterator __first, iterator __last)
+#endif
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 151. can't currently clear() empty container
- __glibcxx_check_erase_range(__position, __last);
- for (_Base_iterator __victim = __position.base();
+ __glibcxx_check_erase_range(__first, __last);
+ for (_Base_const_iterator __victim = __first.base();
__victim != __last.base(); ++__victim)
{
_GLIBCXX_DEBUG_VERIFY(__victim != _Base::end(),
_M_message(__gnu_debug::__msg_valid_range)
- ._M_iterator(__position, "position")
+ ._M_iterator(__first, "position")
._M_iterator(__last, "last"));
this->_M_invalidate_if(_Equal(__victim));
}
- return iterator(_Base::erase(__position.base(), __last.base()), this);
+ return iterator(_Base::erase(__first.base(), __last.base()), this);
}
void
diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector
index 8473686f7bd..4a65518bc82 100644
--- a/libstdc++-v3/include/debug/vector
+++ b/libstdc++-v3/include/debug/vector
@@ -514,7 +514,11 @@ namespace __debug
}
iterator
+#if __cplusplus >= 201103L
+ erase(const_iterator __position)
+#else
erase(iterator __position)
+#endif
{
__glibcxx_check_erase(__position);
difference_type __offset = __position.base() - _Base::begin();
@@ -524,7 +528,11 @@ namespace __debug
}
iterator
+#if __cplusplus >= 201103L
+ erase(const_iterator __first, const_iterator __last)
+#else
erase(iterator __first, iterator __last)
+#endif
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 151. can't currently clear() empty container
@@ -539,7 +547,11 @@ namespace __debug
return iterator(__res, this);
}
else
+#if __cplusplus >= 201103L
+ return iterator(__first.base()._M_const_cast(), this);
+#else
return __first;
+#endif
}
void
OpenPOWER on IntegriCloud