23namespace seqan3::detail
32class type_reduce_fn :
public adaptor_base<type_reduce_fn>
36 using base_t = adaptor_base<type_reduce_fn>;
49 template <std::ranges::range urng_t>
50 static constexpr auto impl(urng_t && urange)
52 static_assert(std::ranges::viewable_range<urng_t>,
53 "The views::type_reduce adaptor can only be passed viewable_ranges, i.e. Views or &-to-non-View.");
56 if constexpr (std::ranges::view<std::remove_cvref_t<urng_t>>)
58 return std::views::all(std::forward<urng_t>(urange));
61 else if constexpr (is_type_specialisation_of_v<std::remove_cvref_t<urng_t>,
std::basic_string> &&
62 std::is_const_v<std::remove_reference_t<urng_t>>)
67 else if constexpr (std::ranges::borrowed_range<urng_t> &&
68 std::ranges::contiguous_range<urng_t> &&
69 std::ranges::sized_range<urng_t>)
74 else if constexpr (std::ranges::borrowed_range<urng_t> &&
75 std::ranges::random_access_range<urng_t> &&
76 std::ranges::sized_range<urng_t>)
78 return std::ranges::subrange<std::ranges::iterator_t<urng_t>, std::ranges::iterator_t<urng_t>>
88 return std::views::all(std::forward<urng_t>(urange));
Provides seqan3::detail::adaptor_base and seqan3::detail::combined_adaptor.
The <concepts> header from C++20's standard library.
constexpr size_t size
The size of a type pack.
Definition: traits.hpp:151
constexpr auto type_reduce
A view adaptor that behaves like std::views::all, but type erases certain ranges.
Definition: type_reduce.hpp:153
The SeqAn namespace for views.
Definition: char_to.hpp:22
The main SeqAn3 namespace.
Definition: cigar_operation_table.hpp:2
decltype(views::type_reduce(std::declval< t >())) type_reduce_t
Deduces the return value of seqan3::views::type_reduce.
Definition: type_reduce.hpp:165
The <ranges> header from C++20's standard library.
Provides std::span from the C++20 standard library.
Provides type traits for working with templates.