16 #include <type_traits>
20 namespace seqan3::detail
40 template <
typename underlying_iterator_t>
41 struct maybe_iterator_category
43 #if SEQAN3_DOXYGEN_ONLY(1) 0
56 concept has_iterator_category =
requires () {
typename t::iterator_category; };
59 #if SEQAN3_WORKAROUND_GCC_96070
63 template <
typename underlying_iterator_t>
65 struct maybe_iterator_category<underlying_iterator_t>
67 using iterator_category = void;
72 template <
typename underlying_iterator_t>
73 requires has_iterator_category<std::iterator_traits<underlying_iterator_t>>
74 struct maybe_iterator_category<underlying_iterator_t>
90 template <
typename underling_iterator_t>
91 struct maybe_inherited_iterator_category :
public maybe_iterator_category<underling_iterator_t>
95 template <
typename underling_iterator_t>
96 requires has_iterator_category<underling_iterator_t>
97 struct maybe_inherited_iterator_category<underling_iterator_t>
109 template <
typename it_t>
110 requires std::input_or_output_iterator<it_t>
112 std::contiguous_iterator<it_t>,
113 std::contiguous_iterator_tag,
126 namespace seqan3::detail
142 template <
typename it_t>
150 template <
typename it_t>
152 struct iter_pointer<it_t>
165 template <
typename it_t>
166 using iter_pointer_t =
typename iter_pointer<it_t>::type;
requires requires
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank....
Definition: alphabet/concept.hpp:164