17namespace seqan3::detail
37template <
typename underlying_iterator_t>
38struct maybe_iterator_category
40#if SEQAN3_DOXYGEN_ONLY(1) 0
53concept has_iterator_category =
requires () {
typename t::iterator_category; };
57template <
typename underlying_iterator_t>
58 requires has_iterator_category<std::iterator_traits<underlying_iterator_t>>
59struct maybe_iterator_category<underlying_iterator_t>
75template <
typename underling_iterator_t>
76struct maybe_inherited_iterator_category :
public maybe_iterator_category<underling_iterator_t>
80template <
typename underling_iterator_t>
81 requires has_iterator_category<underling_iterator_t>
82struct maybe_inherited_iterator_category<underling_iterator_t>
94template <
typename it_t>
95 requires std::input_or_output_iterator<it_t>
97 std::contiguous_iterator<it_t>,
98 std::contiguous_iterator_tag,
111namespace seqan3::detail
127template <
typename it_t>
135template <
typename it_t>
137struct iter_pointer<it_t>
150template <
typename it_t>
151using iter_pointer_t =
typename iter_pointer<it_t>::type;