20namespace seqan3::detail
40template <
typename underlying_iterator_t>
41struct maybe_iterator_category
43#if SEQAN3_DOXYGEN_ONLY(1) 0
56concept has_iterator_category =
requires () {
typename t::iterator_category; };
60template <
typename underlying_iterator_t>
61 requires has_iterator_category<std::iterator_traits<underlying_iterator_t>>
62struct maybe_iterator_category<underlying_iterator_t>
78template <
typename underling_iterator_t>
79struct maybe_inherited_iterator_category :
public maybe_iterator_category<underling_iterator_t>
83template <
typename underling_iterator_t>
84 requires has_iterator_category<underling_iterator_t>
85struct maybe_inherited_iterator_category<underling_iterator_t>
97template <
typename it_t>
98 requires std::input_or_output_iterator<it_t>
100 std::contiguous_iterator<it_t>,
101 std::contiguous_iterator_tag,
114namespace seqan3::detail
130template <
typename it_t>
138template <
typename it_t>
140struct iter_pointer<it_t>
153template <
typename it_t>
154using iter_pointer_t =
typename iter_pointer<it_t>::type;