29 #ifndef _GLIBCXX_DEBUG_HELPER_FUNCTIONS_H    30 #define _GLIBCXX_DEBUG_HELPER_FUNCTIONS_H 1    51   template<
typename _Iterator,
    52            typename = 
typename std::__is_integer<_Iterator>::__type>
    53     struct _Distance_traits
    57       typename std::iterator_traits<_Iterator>::difference_type _ItDiffType;
    59       template<
typename _DiffType,
    60                typename = 
typename std::__is_void<_DiffType>::__type>
    62         { 
typedef _DiffType __type; };
    64       template<
typename _DiffType>
    65         struct _DiffTraits<_DiffType, std::__true_type>
    66         { 
typedef std::ptrdiff_t __type; };
    68       typedef typename _DiffTraits<_ItDiffType>::__type _DiffType;
    74   template<
typename _Integral>
    75     struct _Distance_traits<_Integral, std::__true_type>
    81   template<
typename _Iterator>
    87   template<
typename _Iterator>
    98   template<
typename _Iterator>
   107   template<
typename _Integral>
   120   template<
typename _InputIterator>
   123                       const _InputIterator& __last,
   133           if (__dist.
first == 0)
   138           return __dist.
first >= 0;
   149   template<
typename _InputIterator>
   154       typedef typename std::__is_integer<_InputIterator>::__type _Integral;
   158   template<
typename _InputIterator>
   160     __valid_range(
const _InputIterator& __first, 
const _InputIterator& __last)
   166 #if __cplusplus < 201103L   168   template<
typename _Iterator>
   169     struct __is_safe_random_iterator
   171       enum { __value = 0 };
   172       typedef std::__false_type __type;
   175   template<
typename _Iterator>
   177     : std::_Iter_base<_Iterator, __is_safe_random_iterator<_Iterator>::__value>
   186   template<
typename _Iterator>
   187     inline typename _Siter_base<_Iterator>::iterator_type
   188     __base(_Iterator __it)
   189     { 
return _Siter_base<_Iterator>::_S_base(__it); }
   191   template<
typename _Iterator>
   193     __base(_Iterator __it)
   197 #if __cplusplus < 201103L   198   template<
typename _Iterator>
   200     { 
typedef _Iterator _Type; };
   204   template<
typename _Iterator>
   206     __unsafe(_Iterator __it)
 _T2 second
first is a copy of the first object 
GNU debug classes for public use. 
_T1 first
second_type is the second bound type 
bool __valid_range(const _InputIterator &__first, const _InputIterator &__last, typename _Distance_traits< _InputIterator >::__type &__dist)
bool __valid_range_aux(const _Integral &, const _Integral &, typename _Distance_traits< _Integral >::__type &__dist, std::__true_type)
Struct holding two objects of arbitrary type. 
_Distance_traits< _Iterator >::__type __get_distance(const _Iterator &__lhs, const _Iterator &__rhs, std::random_access_iterator_tag)
Random-access iterators support a superset of bidirectional iterator operations. 
constexpr pair< typename __decay_and_strip< _T1 >::__type, typename __decay_and_strip< _T2 >::__type > make_pair(_T1 &&__x, _T2 &&__y)
A convenience wrapper for creating a pair from two objects. 
iterator_traits< _Iter >::iterator_category __iterator_category(const _Iter &)