aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2024-10-10 22:47:46 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2024-10-11 17:04:56 +0100
commit01c4d1fe251896c25dee7902cf2922927ce4906e (patch)
tree4cb0a66a44cc9371573aa50f97ea1f00f25ac9ee
parent1dcc6a1a67165a469d4cd9b6b39514c46cc656ad (diff)
downloadgcc-01c4d1fe251896c25dee7902cf2922927ce4906e.zip
gcc-01c4d1fe251896c25dee7902cf2922927ce4906e.tar.gz
gcc-01c4d1fe251896c25dee7902cf2922927ce4906e.tar.bz2
libstdc++: Rearrange std::move_iterator helpers in stl_iterator.h
The __niter_base(move_iterator<I>) overload and __is_move_iterator trait were originally immediately after the definition of move_iterator. The addition of C++20 features after move_iterator meant that those helpers were no longer anywhere near move_iterator. This change puts them back where they used to be, before all the new C++20 additions. libstdc++-v3/ChangeLog: * include/bits/stl_iterator.h (__niter_base(move_iterator<I>)) (__is_move_iterator, __miter_base, _GLIBCXX_MAKE_MOVE_ITERATOR) (_GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR): Move earlier in the file.
-rw-r--r--libstdc++-v3/include/bits/stl_iterator.h63
1 files changed, 31 insertions, 32 deletions
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index 20c0319..28a600c 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -1349,9 +1349,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_NOEXCEPT_IF(std::is_nothrow_copy_constructible<_Iterator>::value)
{ return __it.base(); }
-#if __cplusplus >= 201103L
-
-#if __cplusplus <= 201703L
+#if __cplusplus >= 201103L && __cplusplus <= 201703L
// Need to overload __to_address because the pointer_traits primary template
// will deduce element_type of __normal_iterator<T*, C> as T* rather than T.
template<typename _Iterator, typename _Container>
@@ -1362,6 +1360,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return std::__to_address(__it.base()); }
#endif
+#if __cplusplus >= 201103L
/**
* @addtogroup iterators
* @{
@@ -1821,6 +1820,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__make_move_if_noexcept_iterator(_Tp* __i)
{ return _ReturnType(__i); }
+ template<typename _Iterator>
+ _GLIBCXX20_CONSTEXPR
+ auto
+ __niter_base(move_iterator<_Iterator> __it)
+ -> decltype(make_move_iterator(__niter_base(__it.base())))
+ { return make_move_iterator(__niter_base(__it.base())); }
+
+ template<typename _Iterator>
+ struct __is_move_iterator<move_iterator<_Iterator> >
+ {
+ enum { __value = 1 };
+ typedef __true_type __type;
+ };
+
+ template<typename _Iterator>
+ _GLIBCXX20_CONSTEXPR
+ auto
+ __miter_base(move_iterator<_Iterator> __it)
+ -> decltype(__miter_base(__it.base()))
+ { return __miter_base(__it.base()); }
+
+#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter)
+#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) \
+ std::__make_move_if_noexcept_iterator(_Iter)
+#else
+#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) (_Iter)
+#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) (_Iter)
+#endif // C++11
+
#if __cplusplus > 201703L && __glibcxx_concepts
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 3736. move_iterator missing disable_sized_sentinel_for specialization
@@ -2957,35 +2985,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// @} group iterators
- template<typename _Iterator>
- _GLIBCXX20_CONSTEXPR
- auto
- __niter_base(move_iterator<_Iterator> __it)
- -> decltype(make_move_iterator(__niter_base(__it.base())))
- { return make_move_iterator(__niter_base(__it.base())); }
-
- template<typename _Iterator>
- struct __is_move_iterator<move_iterator<_Iterator> >
- {
- enum { __value = 1 };
- typedef __true_type __type;
- };
-
- template<typename _Iterator>
- _GLIBCXX20_CONSTEXPR
- auto
- __miter_base(move_iterator<_Iterator> __it)
- -> decltype(__miter_base(__it.base()))
- { return __miter_base(__it.base()); }
-
-#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) std::make_move_iterator(_Iter)
-#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) \
- std::__make_move_if_noexcept_iterator(_Iter)
-#else
-#define _GLIBCXX_MAKE_MOVE_ITERATOR(_Iter) (_Iter)
-#define _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(_Iter) (_Iter)
-#endif // C++11
-
#if __cpp_deduction_guides >= 201606
// These helper traits are used for deduction guides
// of associative containers.