16 #include <type_traits>
33 #ifdef SEQAN3_DEPRECATED_310
41 template <std::input_iterator it_t>
42 struct value_type<it_t>
48 #endif // SEQAN3_DEPRECATED_310
56 #ifdef SEQAN3_DEPRECATED_310
64 template <std::input_iterator it_t>
65 struct reference<it_t>
71 #endif // SEQAN3_DEPRECATED_310
79 #ifdef SEQAN3_DEPRECATED_310
87 template <std::input_iterator it_t>
88 struct rvalue_reference<it_t>
94 #endif // SEQAN3_DEPRECATED_310
108 #ifdef SEQAN3_DEPRECATED_310
116 template <std::weakly_incrementable it_t>
117 struct difference_type<it_t>
123 #endif // SEQAN3_DEPRECATED_310
131 #ifdef SEQAN3_DEPRECATED_310
141 template <std::weakly_incrementable it_t>
142 struct size_type<it_t>
148 #endif // SEQAN3_DEPRECATED_310
155 namespace seqan3::detail
157 #if SEQAN3_WORKAROUND_GCC_96070
158 template <
typename it_t>
160 struct iterator_category_tag
165 template <
typename it_t>
167 struct iterator_category_tag<it_t>
181 template <
typename it_t>
182 using iterator_category_tag_t =
typename iterator_category_tag<it_t>::type;
183 #else // ^^^ workaround / no workaround vvv
197 template <
typename it_t>
202 #endif // SEQAN3_WORKAROUND_GCC_96070
209 template <
typename it_t>
211 requires std::input_or_output_iterator<it_t>
213 using iterator_concept_tag_t =
215 std::contiguous_iterator<it_t>,
216 std::contiguous_iterator_tag,
218 std::random_access_iterator<it_t>,
221 std::bidirectional_iterator<it_t>,
224 std::forward_iterator<it_t>,
227 std::input_iterator<it_t>,
233 namespace seqan3::detail
248 template <
typename it_t>
256 template <
typename it_t>
258 struct iter_pointer<it_t>
270 template <
typename it_t>
271 using iter_pointer_t =
typename iter_pointer<it_t>::type;