59 #ifndef _STL_ITERATOR_BASE_TYPES_H 60 #define _STL_ITERATOR_BASE_TYPES_H 1 62 #ifdef _GLIBCXX_SYSHDR 63 #pragma GCC system_header 68 #if __cplusplus >= 201103L 72 #if __cplusplus > 201703L && __cpp_concepts >= 201907L 76 namespace std _GLIBCXX_VISIBILITY(default)
78 _GLIBCXX_BEGIN_NAMESPACE_VERSION
111 #if __cplusplus > 201703L 127 template<
typename _Category,
typename _Tp,
typename _Distance = ptrdiff_t,
128 typename _Pointer = _Tp*,
typename _Reference = _Tp&>
151 template<
typename _Iterator>
154 #if __cplusplus >= 201103L 157 template<
typename _Iterator,
typename = __
void_t<>>
158 struct __iterator_traits { };
160 #if ! __cpp_lib_concepts 162 template<
typename _Iterator>
163 struct __iterator_traits<_Iterator,
165 typename _Iterator::value_type,
166 typename _Iterator::difference_type,
167 typename _Iterator::pointer,
168 typename _Iterator::reference>>
171 typedef typename _Iterator::value_type
value_type;
173 typedef typename _Iterator::pointer
pointer;
174 typedef typename _Iterator::reference
reference;
178 template<
typename _Iterator>
180 :
public __iterator_traits<_Iterator> { };
183 template<
typename _Iterator>
187 typedef typename _Iterator::value_type
value_type;
189 typedef typename _Iterator::pointer
pointer;
190 typedef typename _Iterator::reference
reference;
194 #if __cplusplus > 201703L 196 template<
typename _Tp>
197 #if __cpp_concepts >= 201907L 198 requires is_object_v<_Tp>
204 using value_type = remove_cv_t<_Tp>;
205 using difference_type = ptrdiff_t;
206 using pointer = _Tp*;
207 using reference = _Tp&;
211 template<
typename _Tp>
215 typedef _Tp value_type;
216 typedef ptrdiff_t difference_type;
217 typedef _Tp* pointer;
218 typedef _Tp& reference;
222 template<
typename _Tp>
226 typedef _Tp value_type;
227 typedef ptrdiff_t difference_type;
228 typedef const _Tp* pointer;
229 typedef const _Tp& reference;
237 template<
typename _Iter>
238 __attribute__((__always_inline__))
239 inline _GLIBCXX_CONSTEXPR
246 #if __cplusplus >= 201103L 247 template<
typename _Iter>
248 using __iter_category_t
251 template<
typename _InIter>
252 using _RequireInputIter =
253 __enable_if_t<is_convertible<__iter_category_t<_InIter>,
257 template<
typename _InIter>
258 concept __has_input_iter_cat
261 #ifdef __cpp_lib_concepts 263 template<
typename _InIterator>
264 concept __any_input_iterator
265 = input_iterator<_InIterator> || __has_input_iter_cat<_InIterator>;
269 template<
typename _It,
270 typename _Cat = __iter_category_t<_It>>
271 struct __is_random_access_iter
272 :
is_base_of<random_access_iterator_tag, _Cat>
275 enum { __value = _Base::value };
278 template<
typename _It,
typename _Traits = iterator_traits<_It>,
279 typename _Cat =
typename _Traits::iterator_category>
280 struct __is_random_access_iter
284 _GLIBCXX_END_NAMESPACE_VERSION
287 #if __glibcxx_algorithm_default_value_type // C++ >= 26 288 # define _GLIBCXX26_DEF_VAL_T(T) = T 289 # define _GLIBCXX26_ALGO_DEF_VAL_T(_Iterator) \ 290 = typename iterator_traits<_Iterator>::value_type 292 # define _GLIBCXX26_DEF_VAL_T(T) 293 # define _GLIBCXX26_ALGO_DEF_VAL_T(_Iterator)
Contiguous iterators point to objects stored contiguously in memory.
constexpr iterator_traits< _Iter >::iterator_category __iterator_category(const _Iter &)
ISO C++ entities toplevel namespace is std.
Forward iterators support a superset of input iterator operations.
_Category iterator_category
One of the tag types.
Random-access iterators support a superset of bidirectional iterator operations.
Marking output iterators.
_Reference reference
This type represents a reference-to-value_type.
Bidirectional iterators support a superset of forward iterator operations.
_Distance difference_type
Distance between iterators is represented as this type.
_Tp value_type
The type "pointed to" by the iterator.
Traits class for iterators.
_Pointer pointer
This type represents a pointer-to-value_type.