Changeset View
Changeset View
Standalone View
Standalone View
libcxx/include/__iterator/concepts.h
Show First 20 Lines • Show All 121 Lines • ▼ Show 20 Lines | |||||
// [iterator.concept.forward] | // [iterator.concept.forward] | ||||
template<class _Ip> | template<class _Ip> | ||||
concept forward_iterator = | concept forward_iterator = | ||||
input_iterator<_Ip> && | input_iterator<_Ip> && | ||||
derived_from<_ITER_CONCEPT<_Ip>, forward_iterator_tag> && | derived_from<_ITER_CONCEPT<_Ip>, forward_iterator_tag> && | ||||
incrementable<_Ip> && | incrementable<_Ip> && | ||||
sentinel_for<_Ip, _Ip>; | sentinel_for<_Ip, _Ip>; | ||||
// [iterator.concept.bidir] | |||||
template<class _Ip> | |||||
concept bidirectional_iterator = | |||||
forward_iterator<_Ip> && | |||||
derived_from<_ITER_CONCEPT<_Ip>, bidirectional_iterator_tag> && | |||||
requires(_Ip __i) { | |||||
{ --__i } -> same_as<_Ip&>; | |||||
{ __i-- } -> same_as<_Ip>; | |||||
}; | |||||
// clang-format on | // clang-format on | ||||
#endif // !defined(_LIBCPP_HAS_NO_RANGES) | #endif // !defined(_LIBCPP_HAS_NO_RANGES) | ||||
_LIBCPP_END_NAMESPACE_STD | _LIBCPP_END_NAMESPACE_STD | ||||
_LIBCPP_POP_MACROS | _LIBCPP_POP_MACROS | ||||
#endif // _LIBCPP___ITERATOR_CONCEPTS_H | #endif // _LIBCPP___ITERATOR_CONCEPTS_H |