From 6b0e18ca48bb4b4c01e7b5be2b98849943fdcf91 Mon Sep 17 00:00:00 2001 From: paolo Date: Fri, 10 May 2013 15:18:33 +0000 Subject: 2013-05-10 Paolo Carlini 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 . * 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, erase_base, erase_base): 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 --- libstdc++-v3/include/debug/deque | 22 +++++++++++++++++++--- libstdc++-v3/include/debug/list | 23 ++++++++++++++++++----- libstdc++-v3/include/debug/vector | 12 ++++++++++++ 3 files changed, 49 insertions(+), 8 deletions(-) (limited to 'libstdc++-v3/include/debug') 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 -- cgit v1.2.3