diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-08-02 07:34:55 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-08-02 07:34:55 +0000 |
commit | 6e61baeb55c72f2311ecd6afe50855bd4cecf135 (patch) | |
tree | 9d118b91e487421949261fc3184a5e3e9d7c7ff4 /libstdc++-v3 | |
parent | 9a653b4393d38cad4914caeea17d1356c0c2bd78 (diff) | |
download | gcc-6e61baeb55c72f2311ecd6afe50855bd4cecf135.tar.gz |
2013-08-02 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/58049
* include/debug/functions.h: Include <bits/move.h>; minor formatting
changes.
(__foreign_iterator_aux4): Declare __l and __ge constexpr.
* include/debug/safe_iterator.h (_Safe_iterator<>::operator->):
Use __addressof.
* include/debug/safe_local_iterator.h (_Safe_local_iterator<>::
operator->): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201424 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 11 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/functions.h | 44 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/safe_iterator.h | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/safe_local_iterator.h | 3 |
4 files changed, 35 insertions, 26 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 651f8b6a974..4ec4343d339 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,14 @@ +2013-08-02 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58049 + * include/debug/functions.h: Include <bits/move.h>; minor formatting + changes. + (__foreign_iterator_aux4): Declare __l and __ge constexpr. + * include/debug/safe_iterator.h (_Safe_iterator<>::operator->): + Use __addressof. + * include/debug/safe_local_iterator.h (_Safe_local_iterator<>:: + operator->): Likewise. + 2013-08-01 François Dumont <fdumont@gcc.gnu.org> PR libstdc++/57779 diff --git a/libstdc++-v3/include/debug/functions.h b/libstdc++-v3/include/debug/functions.h index 87478c6fbc1..463353e0fc4 100644 --- a/libstdc++-v3/include/debug/functions.h +++ b/libstdc++-v3/include/debug/functions.h @@ -33,6 +33,7 @@ #include <bits/stl_iterator_base_types.h> // for iterator_traits, categories and // _Iter_base #include <bits/cpp_type_traits.h> // for __is_integer +#include <bits/move.h> // for __addressof and addressof #if __cplusplus >= 201103L # include <bits/stl_function.h> // for less and greater_equal # include <type_traits> // for common_type @@ -126,8 +127,8 @@ namespace __gnu_debug inline bool __valid_range_aux(const _InputIterator& __first, const _InputIterator& __last, std::__false_type) - { return __valid_range_aux2(__first, __last, - std::__iterator_category(__first)); } + { return __valid_range_aux2(__first, __last, + std::__iterator_category(__first)); } /** Don't know what these iterators are, or if they are even * iterators (we may get an integral type for InputIterator), so @@ -182,15 +183,14 @@ namespace __gnu_debug { typedef typename std::common_type<_PointerType1, _PointerType2>::type _PointerType; - std::less<_PointerType> __l; - std::greater_equal<_PointerType> __ge; - - return - __l(std::addressof(*__other), - std::addressof(*(__it._M_get_sequence()->_M_base().begin()))) - || __ge(std::addressof(*__other), - std::addressof(*(__it._M_get_sequence()->_M_base().end() - 1)) + 1); - + constexpr std::less<_PointerType> __l; + constexpr std::greater_equal<_PointerType> __ge; + + return (__l(std::addressof(*__other), + std::addressof(*(__it._M_get_sequence()->_M_base().begin()))) + || __ge(std::addressof(*__other), + std::addressof(*(__it._M_get_sequence()->_M_base().end() + - 1)) + 1)); } template<typename _Iterator, typename _Sequence, typename _InputIterator> @@ -205,12 +205,13 @@ namespace __gnu_debug // past-the-end iterator. if (__it._M_get_sequence()->_M_base().begin() != __it._M_get_sequence()->_M_base().end()) - if (std::__addressof(*(__it._M_get_sequence()->_M_base().end() - 1)) - - std::__addressof(*(__it._M_get_sequence()->_M_base().begin())) + if (std::addressof(*(__it._M_get_sequence()->_M_base().end() - 1)) + - std::addressof(*(__it._M_get_sequence()->_M_base().begin())) == __it._M_get_sequence()->size() - 1) - return __foreign_iterator_aux4(__it, __other, - std::addressof(*(__it._M_get_sequence()->_M_base().begin())), - std::addressof(*__other)); + return (__foreign_iterator_aux4 + (__it, __other, + std::addressof(*(__it._M_get_sequence()->_M_base().begin())), + std::addressof(*__other))); return true; } @@ -232,8 +233,8 @@ namespace __gnu_debug { return __it._M_get_sequence() != __other._M_get_sequence(); } #if __cplusplus >= 201103L - /* This overload detects when passing pointers to the contained elements rather - than using iterators. + /* This overload detects when passing pointers to the contained elements + rather than using iterators. */ template<typename _Iterator, typename _Sequence, typename _InputIterator> inline bool @@ -271,10 +272,9 @@ namespace __gnu_debug _InputIterator __other, std::__false_type) { - return - _Insert_range_from_self_is_safe<_Sequence>::__value - || __foreign_iterator_aux2(__it, __other, - std::__iterator_category(__it)); + return (_Insert_range_from_self_is_safe<_Sequence>::__value + || __foreign_iterator_aux2(__it, __other, + std::__iterator_category(__it))); } template<typename _Iterator, typename _Sequence, diff --git a/libstdc++-v3/include/debug/safe_iterator.h b/libstdc++-v3/include/debug/safe_iterator.h index b8a971b80e0..a1f7651b1bd 100644 --- a/libstdc++-v3/include/debug/safe_iterator.h +++ b/libstdc++-v3/include/debug/safe_iterator.h @@ -269,7 +269,6 @@ namespace __gnu_debug * @brief Iterator dereference. * @pre iterator is dereferenceable * @todo Make this correct w.r.t. iterators that return proxies - * @todo Use addressof() instead of & operator */ pointer operator->() const @@ -277,7 +276,7 @@ namespace __gnu_debug _GLIBCXX_DEBUG_VERIFY(this->_M_dereferenceable(), _M_message(__msg_bad_deref) ._M_iterator(*this, "this")); - return &*_M_current; + return std::__addressof(*_M_current); } // ------ Input iterator requirements ------ diff --git a/libstdc++-v3/include/debug/safe_local_iterator.h b/libstdc++-v3/include/debug/safe_local_iterator.h index 6426ed82afa..82975b70722 100644 --- a/libstdc++-v3/include/debug/safe_local_iterator.h +++ b/libstdc++-v3/include/debug/safe_local_iterator.h @@ -173,7 +173,6 @@ namespace __gnu_debug * @brief Iterator dereference. * @pre iterator is dereferenceable * @todo Make this correct w.r.t. iterators that return proxies - * @todo Use addressof() instead of & operator */ pointer operator->() const @@ -181,7 +180,7 @@ namespace __gnu_debug _GLIBCXX_DEBUG_VERIFY(this->_M_dereferenceable(), _M_message(__msg_bad_deref) ._M_iterator(*this, "this")); - return &*_M_current; + return std::__addressof(*_M_current); } // ------ Input iterator requirements ------ |