29#ifndef _GLIBCXX_DEBUG_STL_ITERATOR_H
30#define _GLIBCXX_DEBUG_STL_ITERATOR_H 1
37 template<
typename _Iterator>
40 __valid_range(
const std::reverse_iterator<_Iterator>& __first,
41 const std::reverse_iterator<_Iterator>& __last,
42 typename _Distance_traits<_Iterator>::__type& __dist)
47 template<
typename _Iterator>
49 inline typename _Distance_traits<_Iterator>::__type
51 const std::reverse_iterator<_Iterator>& __last)
54 template<
typename _Iterator,
typename _Size>
57 __can_advance(
const std::reverse_iterator<_Iterator>& __it, _Size __n)
58 {
return __gnu_debug::__can_advance(__it.
base(), -__n); }
60 template<
typename _Iterator,
typename _Diff>
63 __can_advance(
const std::reverse_iterator<_Iterator>& __it,
66 {
return __gnu_debug::__can_advance(__it.
base(), __dist, -__way); }
68 template<
typename _Iterator,
typename _Sequence>
70 inline std::reverse_iterator<_Iterator>
72 _Iterator, _Sequence, std::random_access_iterator_tag> >& __it)
73 {
return std::reverse_iterator<_Iterator>(__it.base().base()); }
75#if __cplusplus < 201103L
76 template<
typename _Iterator>
77 struct _Unsafe_type<std::reverse_iterator<_Iterator> >
79 typedef typename _Unsafe_type<_Iterator>::_Type _UnsafeType;
80 typedef std::reverse_iterator<_UnsafeType> _Type;
83 template<
typename _Iterator>
84 inline std::reverse_iterator<typename _Unsafe_type<_Iterator>::_Type>
85 __unsafe(
const std::reverse_iterator<_Iterator>& __it)
87 typedef typename _Unsafe_type<_Iterator>::_Type _UnsafeType;
88 return std::reverse_iterator<_UnsafeType>(__unsafe(__it.
base()));
91 template<
typename _Iterator>
94 __unsafe(
const std::reverse_iterator<_Iterator>& __it)
95 ->
decltype(std::__make_reverse_iterator(__unsafe(__it.
base())))
96 {
return std::__make_reverse_iterator(__unsafe(__it.
base())); }
99#if __cplusplus >= 201103L
101 template<
typename _Iterator>
105 const std::move_iterator<_Iterator>& __last,
106 typename _Distance_traits<_Iterator>::__type& __dist)
111 template<
typename _Iterator>
113 inline typename _Distance_traits<_Iterator>::__type
115 const std::move_iterator<_Iterator>& __last)
118 template<
typename _Iterator,
typename _Size>
121 __can_advance(
const std::move_iterator<_Iterator>& __it, _Size __n)
122 {
return __gnu_debug::__can_advance(__it.base(), __n); }
124 template<
typename _Iterator,
typename _Diff>
127 __can_advance(
const std::move_iterator<_Iterator>& __it,
130 {
return __gnu_debug::__can_advance(__it.base(), __dist, __way); }
132 template<
typename _Iterator>
135 __unsafe(
const std::move_iterator<_Iterator>& __it)
136 ->
decltype(std::make_move_iterator(__unsafe(__it.
base())))
137 {
return std::make_move_iterator(__unsafe(__it.
base())); }
139 template<
typename _Iterator>
142 __base(
const std::move_iterator<_Iterator>& __it)
143 ->
decltype(std::make_move_iterator(
__base(__it.
base())))
144 {
return std::make_move_iterator(
__base(__it.
base())); }
pair(_T1, _T2) -> pair< _T1, _T2 >
Two pairs are equal iff their members are equal.
GNU debug classes for public use.
constexpr _Distance_traits< _Iterator >::__type __get_distance(_Iterator __lhs, _Iterator __rhs, std::random_access_iterator_tag)
constexpr bool __valid_range(_InputIterator __first, _InputIterator __last, typename _Distance_traits< _InputIterator >::__type &__dist)
constexpr _Iterator __base(_Iterator __it)
constexpr iterator_type base() const noexcept(/*conditional */)