5 #ifndef VCCC_ITERATOR_DETAIL_ITER_CONCEPT_HPP_
6 #define VCCC_ITERATOR_DETAIL_ITER_CONCEPT_HPP_
15 struct ITER_TRAITS_T {
16 using type = std::conditional_t<
17 is_primary_iterator_traits< cxx20_iterator_traits<I> >
::value,
19 cxx20_iterator_traits<I>>;
23 using ITER_TRAITS =
typename ITER_TRAITS_T<I>::type;
26 template<
typename I,
bool = is_primary_iterator_traits< cxx20_iterator_traits<I> >::value >
27 struct ITER_CONCEPT_IMPL_3 {};
29 struct ITER_CONCEPT_IMPL_3<I, true> {
33 template<
typename I,
bool = has_
typename_iterator_category<ITER_TRAITS<I>>::value >
34 struct ITER_CONCEPT_IMPL_2 : ITER_CONCEPT_IMPL_3<I> {};
36 struct ITER_CONCEPT_IMPL_2<I, true> {
37 using type =
typename ITER_TRAITS<I>::iterator_category;
40 template<
typename I,
bool = has_
typename_iterator_concept<ITER_TRAITS<I>>::value >
41 struct ITER_CONCEPT_IMPL_1 : ITER_CONCEPT_IMPL_2<I> {};
43 struct ITER_CONCEPT_IMPL_1<I, true> {
44 using type =
typename ITER_TRAITS<I>::iterator_concept;
48 struct ITER_CONCEPT_T : ITER_CONCEPT_IMPL_1<I> {};
51 using ITER_CONCEPT =
typename ITER_CONCEPT_T<I>::type;
std::random_access_iterator_tag random_access_iterator_tag
Definition: iterator_tag.hpp:19
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35