20 namespace seqan3::detail
40 template <
typename underlying_iterator_t>
41 struct maybe_iterator_category
43 #if SEQAN3_DOXYGEN_ONLY(1)0
50 using iterator_category = MAYBE_PRESENT(std::iterator_traits<underlying_iterator_t>::iterator_category);
56 SEQAN3_CONCEPT has_iterator_category = requires ()
58 typename t::iterator_category;
62 #if SEQAN3_WORKAROUND_GCC_96070
66 template <
typename underlying_iterator_t>
67 requires (!has_iterator_category<std::iterator_traits<underlying_iterator_t>>)
68 struct maybe_iterator_category<underlying_iterator_t>
70 using iterator_category = void;
75 template <
typename underlying_iterator_t>
76 requires has_iterator_category<std::iterator_traits<underlying_iterator_t>>
77 struct maybe_iterator_category<underlying_iterator_t>
79 using iterator_category =
typename std::iterator_traits<underlying_iterator_t>::iterator_category;
93 template <
typename underling_iterator_t>
94 struct maybe_inherited_iterator_category :
public maybe_iterator_category<underling_iterator_t>
98 template <
typename underling_iterator_t>
99 requires has_iterator_category<underling_iterator_t>
100 struct maybe_inherited_iterator_category<underling_iterator_t>
112 template <
typename it_t>
114 requires std::input_or_output_iterator<it_t>
116 using iterator_concept_tag_t =
118 std::contiguous_iterator<it_t>,
119 std::contiguous_iterator_tag,
121 std::random_access_iterator<it_t>,
122 std::random_access_iterator_tag,
124 std::bidirectional_iterator<it_t>,
125 std::bidirectional_iterator_tag,
127 std::forward_iterator<it_t>,
128 std::forward_iterator_tag,
130 std::input_iterator<it_t>,
131 std::input_iterator_tag,
132 std::output_iterator_tag>>>>>;
136 namespace seqan3::detail
152 template <
typename it_t>
160 template <
typename it_t>
161 requires requires {
typename std::iterator_traits<it_t>::pointer; }
162 struct iter_pointer<it_t>
166 using type =
typename std::iterator_traits<it_t>::pointer;
175 template <
typename it_t>
176 using iter_pointer_t =
typename iter_pointer<it_t>::type;
Provides C++20 additions to the <iterator> header.
Provides C++20 additions to the type_traits header.