29 #ifndef _GLIBCXX_DEBUG_HELPER_FUNCTIONS_H 30 #define _GLIBCXX_DEBUG_HELPER_FUNCTIONS_H 1 41 template<
typename _Iterator,
typename _Sequence,
typename _Category>
44 #if __cplusplus >= 201103L 45 template<
typename _Iterator,
typename _Sequence>
46 class _Safe_local_iterator;
61 template<
typename _Iterator,
62 typename =
typename std::__is_integer<_Iterator>::__type>
63 struct _Distance_traits
69 template<
typename _DiffType,
70 typename =
typename std::__is_void<_DiffType>::__type>
72 {
typedef _DiffType __type; };
74 template<
typename _DiffType>
75 struct _DiffTraits<_DiffType, std::__true_type>
76 {
typedef std::ptrdiff_t __type; };
78 typedef typename _DiffTraits<_ItDiffType>::__type _DiffType;
84 template<
typename _Integral>
85 struct _Distance_traits<_Integral, std::__true_type>
91 template<
typename _Iterator>
96 {
return std::make_pair(__rhs - __lhs, __dp_exact); }
98 template<
typename _Iterator>
105 return std::make_pair(0, __dp_exact);
107 return std::make_pair(1, __dp_equality);
110 template<
typename _Iterator>
121 __check_singular_aux(
const void*) {
return false; }
129 template<
typename _Iterator>
132 __check_singular(_Iterator
const& __x)
134 return ! std::__is_constant_evaluated()
139 template<
typename _Tp>
142 __check_singular(_Tp*
const& __ptr)
143 {
return __ptr == 0; }
149 template<
typename _Integral>
155 template<
typename _Integral>
162 __dist = std::make_pair(0, __dp_none);
166 template<
typename _InputIterator>
174 if (std::__is_constant_evaluated())
177 return __first == __last
182 template<
typename _InputIterator>
190 && __first <= __last;
196 template<
typename _InputIterator>
206 template<
typename _InputIterator>
223 if (__dist.
first == 0)
227 case __dp_sign_max_size:
229 return __dist.
first >= 0;
241 template<
typename _InputIterator>
247 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
252 template<
typename _Iterator,
typename _Sequence,
typename _Category>
258 #if __cplusplus >= 201103L 259 template<
typename _Iterator,
typename _Sequence>
266 template<
typename _InputIterator>
271 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
275 template<
typename _Iterator,
typename _Sequence,
typename _Category>
280 #if __cplusplus >= 201103L 281 template<
typename _Iterator,
typename _Sequence>
288 template<
typename _InputIterator,
typename _Size>
291 __can_advance(_InputIterator, _Size)
294 template<
typename _Iterator,
typename _Sequence,
typename _Category,
300 template<
typename _InputIterator,
typename _Diff>
306 template<
typename _Iterator,
typename _Sequence,
typename _Category,
318 template<
typename _Iterator>
324 #if __cplusplus < 201103L 325 template<
typename _Iterator>
327 {
typedef _Iterator _Type; };
331 template<
typename _Iterator>
334 __unsafe(_Iterator __it)
constexpr bool __valid_range(_InputIterator __first, _InputIterator __last, typename _Distance_traits< _InputIterator >::__type &__dist)
constexpr iterator_traits< _Iter >::iterator_category __iterator_category(const _Iter &)
constexpr bool __check_singular(_Tp *const &__ptr)
_T2 second
The second member.
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
constexpr bool __valid_range_aux(_Integral, _Integral, std::__true_type)
bool __check_singular_aux(const _Safe_iterator_base *__x)
Traits class for iterators.
_T1 first
The first member.
Random-access iterators support a superset of bidirectional iterator operations.
GNU debug classes for public use.
constexpr _Iterator __base(_Iterator __it)
Basic functionality for a safe iterator.
Struct holding two objects of arbitrary type.
constexpr _Distance_traits< _Iterator >::__type __get_distance(_Iterator __lhs, _Iterator __rhs, std::random_access_iterator_tag)