16 #include <type_traits>
40 template <
typename underlying_iterator_t>
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>
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>
93 template <
typename underling_iterator_t>
98 template <
typename underling_iterator_t>
99 requires has_iterator_category<underling_iterator_t>
112 template <
typename it_t>
114 requires std::input_or_output_iterator<it_t>
118 std::contiguous_iterator<it_t>,
119 std::contiguous_iterator_tag,
121 std::random_access_iterator<it_t>,
124 std::bidirectional_iterator<it_t>,
127 std::forward_iterator<it_t>,
130 std::input_iterator<it_t>,
152 template <
typename it_t>
160 template <
typename it_t>
162 struct iter_pointer<it_t>
175 template <
typename it_t>
typename iter_pointer< it_t >::type iter_pointer_t
Return the pointer type of the input type (transformation_trait shortcut).
Definition: iterator_traits.hpp:176
Provides C++20 additions to the <iterator> header.
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
This is like std::iter_value_t, but for the pointer type.
Definition: iterator_traits.hpp:154
void type
The pointer type of std::iterator_traits or void.
Definition: iterator_traits.hpp:156
This handles more cases than maybe_iterator_category if you inherit the underling_iterator_t.
Definition: iterator_traits.hpp:95
Defines iterator_category member if underlying_iterator_t has a valid std::iterator_traits::iterator_...
Definition: iterator_traits.hpp:42
MAYBE_PRESENT(std::iterator_traits< underlying_iterator_t >::iterator_category) iterator_category
The iterator category tag. (not always present!)
Definition: iterator_traits.hpp:50