25namespace seqan3::detail
30concept has_range_value_type =
requires {
typename std::ranges::range_value_t<std::remove_cvref_t<t>>; };
35template <
bool const_range,
typename range_t>
40template <
bool const_range,
typename range_t>
41using maybe_const_iterator_t = std::ranges::iterator_t<maybe_const_range_t<const_range, range_t>>;
45template <
bool const_v,
typename range_t>
46using maybe_const_sentinel_t = std::ranges::sentinel_t<maybe_const_range_t<const_v, range_t>>;
50template <
typename unary_predicate_fn_t,
typename urng_t>
51concept indirect_unary_predicate_on_range =
52 std::ranges::range<urng_t> && std::indirect_unary_predicate<unary_predicate_fn_t, std::ranges::iterator_t<urng_t>>;
74 requires detail::has_range_value_type<t>
78 using type = std::ranges::range_value_t<std::remove_cvref_t<t>>;
83 requires detail::has_range_value_type<t>
84 && detail::has_range_value_type<std::ranges::range_value_t<std::remove_cvref_t<t>>>
111 requires detail::has_range_value_type<t>
116 requires detail::has_range_value_type<t>
117 && detail::has_range_value_type<std::ranges::range_value_t<std::remove_cvref_t<t>>>
Provides various type traits on generic types.
A "pretty printer" for most SeqAn data structures and related types.
Definition debug_stream_type.hpp:79
constexpr size_t range_dimension_v
Returns the number of times you can call seqan3::value_type_t recursively on t (type trait).
Definition core/range/type_traits.hpp:112
typename range_innermost_value< t >::type range_innermost_value_t
Shortcut for seqan3::range_innermost_value (transformation_trait shortcut).
Definition core/range/type_traits.hpp:95
Provides various transformation traits for use on iterators.
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
Recursively determines the value_type on containers and/or iterators.
Definition core/range/type_traits.hpp:76
std::ranges::range_value_t< std::remove_cvref_t< t > > type
The return type (recursion not shown).
Definition core/range/type_traits.hpp:78