SeqAn3  3.0.0
The Modern C++ library for sequence analysis.
ranges

The <ranges> header from C++20's standard library. More...

+ Collaboration diagram for ranges:

Classes

interface  std::ranges::BidirectionalRange
 Specifies requirements of a Range type for which begin returns a type that models std::BidirectionalIterator. More...
 
interface  std::ranges::CommonRange
 Specifies requirements of a Range type for which begin and end return objects of the same type. More...
 
interface  std::ranges::ContiguousRange
 Specifies requirements of a Range type whose elements occupy adjacent locations in memory. More...
 
interface  std::ranges::ForwardRange
 Specifies requirements of a Range type for which begin returns a type that models std::ForwardIterator. More...
 
interface  std::ranges::InputRange
 Specifies requirements of a Range type for which begin returns a type that models std::InputIterator. More...
 
interface  std::ranges::OutputRange
 Specifies requirements of a Range type for which begin returns a type that models std::OutputIterator. More...
 
interface  std::ranges::RandomAccessRange
 Specifies requirements of a Range type for which begin returns a type that models std::RandomAccessIterator. More...
 
interface  std::ranges::Range
 Defines the requirements of a type that allows iteration over its elements by providing a begin iterator and an end sentinel. More...
 
interface  std::ranges::SizedRange
 Specifies the requirements of a Range type that knows its size in constant time with the size function. More...
 
interface  std::ranges::View
 Specifies the requirements of a Range type that has constant time copy, move and assignment operators. More...
 
interface  std::ranges::ViewableRange
 Specifies the requirements of a Range type that is either a std::ranges::View or an lvalue-reference. More...
 

Typedefs

using std::ranges::begin = ::ranges::begin
 Alias for ranges::begin. Returns an iterator to the beginning of a range.
 
using std::ranges::cbegin = ::ranges::cbegin
 Alias for ranges::cbegin. Returns an iterator to the beginning of a range.
 
using std::ranges::cend = ::ranges::cend
 Alias for ranges::cend. Returns an iterator to the end of a range.
 
using std::ranges::data = ::ranges::data
 Alias for ranges::data. Returns a pointer the block of data of a ContiguousRange.
 
using std::ranges::empty = ::ranges::empty
 Alias for ranges::empty. Checks whether a range is empty.
 
using std::ranges::end = ::ranges::end
 Alias for ranges::end. Returns an iterator to the end of a range.
 
template<typename value_type >
using std::ranges::istream_view = ::ranges::istream_view< value_type >
 A view over an input stream. More...
 
using std::ranges::iterator_t = ::ranges::iterator_t
 Alias for ranges::iterator_t. Obtains the iterator type of a range.
 
using std::ranges::sentinel_t = ::ranges::sentinel_t
 Alias for ranges::sentinel_t. Obtains the sentinel type of a range.
 
using std::ranges::size = ::ranges::size
 Alias for ranges::size. Obtains the size of a range whose size can be calculated in constant time.
 
template<std::Iterator it_t, std::Sentinel< it_t > sen_t, subrange_kind k = std::SizedSentinel<sen_t, it_t> ? subrange_kind::sized : subrange_kind::unsized>
using std::ranges::subrange = ::ranges::subrange< it_t, sen_t, k >
 Create a view from a pair of iterator and sentinel. More...
 
using std::ranges::to = ::ranges::_to_::to
 Alias for ranges::to.
 
template<typename urng_t >
using std::ranges::view_interface = ::ranges::view_interface< urng_t >
 Alias for ranges::view_interface.
 

Variables

constexpr auto std::ranges::view::all
 A range adaptor that forwards views and "view-wraps" containers (you will likely not need to use this unless defining a new view). More...
 
constexpr auto std::ranges::view::common
 A range adaptor that makes any range model std::ranges::CommonRange (at the expense of some performance). More...
 
constexpr auto std::ranges::view::drop
 A range adaptor that returns all elements from the underlying range after count. More...
 
constexpr auto std::ranges::view::drop_while
 A range adaptor that drops elements from the underlying range as long as the functor evaluates to true (and returns the rest). More...
 
constexpr auto std::ranges::view::filter
 A range adaptor that takes a predicate and returns a view of the elements that satisfy the predicate. More...
 
constexpr auto std::ranges::view::iota
 Generates a sequence of elements by repeatedly incrementing an initial value. More...
 
constexpr auto std::ranges::view::join
 Flattens a View of ranges into a View. More...
 
constexpr auto std::ranges::view::reverse
 A range adaptor that presents the underlying range in reverse order. More...
 
constexpr auto std::ranges::view::single
 Given a value, produces a view that contains exactly one element. More...
 
constexpr auto std::ranges::view::split
 Takes a View and a delimiter, and splits the View into subranges on the delimiter. More...
 
constexpr auto std::ranges::view::take
 A range adaptor that returns the first size elements from the underlying range (or less if the underlying range is shorter). More...
 
constexpr auto std::ranges::view::take_while
 A range adaptor that returns elements from the underlying range until the functor evaluates to false (or the end of the underlying range is reached). More...
 
constexpr auto std::ranges::view::transform
 A range adaptor that takes a invocable and returns a view of the elements with the invocable applied. More...
 
constexpr auto std::ranges::view::zip
 A range adaptor that transforms a tuple of range into a range of tuples. More...
 

Detailed Description

The <ranges> header from C++20's standard library.

Typedef Documentation

◆ istream_view

template<typename value_type >
using std::ranges::istream_view = typedef ::ranges::istream_view<value_type>

A view over an input stream.

Template Parameters
value_typeThe value_type read from the stream.
Parameters
[in]istrThe object of type std::istream.
Returns
A view over an input stream.

View properties

This view is source-only, it can only be at the beginning of a pipe of range transformations.

range concepts and reference_t rrng_t (returned range type)
std::ranges::InputRange guaranteed
std::ranges::ForwardRange
std::ranges::BidirectionalRange
std::ranges::RandomAccessRange
std::ranges::ContiguousRange
std::ranges::ViewableRange guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange
std::ranges::CommonRange
std::ranges::OutputRange
seqan3::ConstIterableRange
seqan3::reference_t value_type &

See the view submodule documentation for detailed descriptions of the view properties.

◆ subrange

template<std::Iterator it_t, std::Sentinel< it_t > sen_t, subrange_kind k = std::SizedSentinel<sen_t, it_t> ? subrange_kind::sized : subrange_kind::unsized>
using std::ranges::subrange = typedef ::ranges::subrange<it_t, sen_t, k>

Create a view from a pair of iterator and sentinel.

Template Parameters
it_tType of the iterator; must model std::Iterator.
sen_tType of the sentinel; must model std::Sentinel with it_t.
Parameters
[in]itThe iterator on the underlying range.
[in]senThe sentinel on the underlying range
Returns
A view of the elements between it_t and sen_t.

View properties

This view is source-only, it can only be at the beginning of a pipe of range transformations.

range concepts and reference_t rrng_t (returned range type)
std::ranges::InputRange preserved
std::ranges::ForwardRange preserved
std::ranges::BidirectionalRange preserved
std::ranges::RandomAccessRange preserved
std::ranges::ContiguousRange preserved
std::ranges::ViewableRange guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange preserved
std::ranges::CommonRange preserved
std::ranges::OutputRange preserved
seqan3::ConstIterableRange preserved
seqan3::reference_t seqan3::value_type_t<it_t>

Preservation in this table refers to the properties of the iterator/sentinel pair.

See the view submodule documentation for detailed descriptions of the view properties.

STD module

This entity will likely be part of C++20 or C++23. It's API will track current proposals and not be stable within SeqAn3 releases. It is implemented via the range-v3 library or the standard library (if available). Should it become clear that it will not become part of a future standard, it will migrate to a regular SeqAn3 module.

Example

dna4_vector s{"ACTTTGATAA"_dna4};
using iterator = dna4_vector::iterator;
auto v1 = std::ranges::subrange<iterator, iterator>{begin(s) + 2, end(s)} | view::to_char; // == "TTTGATAA"

Variable Documentation

◆ all

constexpr auto std::ranges::view::all
inline

A range adaptor that forwards views and "view-wraps" containers (you will likely not need to use this unless defining a new view).

Template Parameters
urng_tThe type of the range being processed. See below for requirements.
Parameters
[in]urangeThe range being processed.
Returns
A view over the elements of the underlying range.

View properties

This view is source-only, it can only be at the beginning of a pipe of range transformations. The "underlying range" refers to the mandatory parameter of this adaptor, not a previous range in a pipe.

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange preserved
std::ranges::ForwardRange preserved
std::ranges::BidirectionalRange preserved
std::ranges::RandomAccessRange preserved
std::ranges::ContiguousRange preserved
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange preserved
std::ranges::CommonRange preserved
std::ranges::OutputRange preserved
seqan3::ConstIterableRange preserved
seqan3::reference_t seqan3::reference_t<urng_t>

See the view submodule documentation for detailed descriptions of the view properties.

Example

dna4_vector s{"ACTTTGATAN"_dna4};
auto v = std::view::all(s); // the same as std::ranges::subrange{begin(s), end(s)}

◆ common

constexpr auto std::ranges::view::common
inline

A range adaptor that makes any range model std::ranges::CommonRange (at the expense of some performance).

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
Returns
A view of the underlying range that is common – even if the underlying range is not.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange preserved
std::ranges::BidirectionalRange lost
std::ranges::RandomAccessRange lost
std::ranges::ContiguousRange lost
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange preserved
std::ranges::CommonRange guarenteed
std::ranges::OutputRange preserved
seqan3::ConstIterableRange preserved
seqan3::reference_t seqan3::reference_t<urng_t>

See the view submodule documentation for detailed descriptions of the view properties.

Example

dna5_vector s{"ACTNTGATAN"_dna5};
auto v1 = s | std::view::filter([](dna5 const l) { return (l != 'N'_dna5); }); // == "ACTTGATA"_dna5
// this won't work (as of C++17), because std::find expects begin and end to be of the same type:
// auto it = std::find(begin(v1), end(v1), 'G'_dna5);
// this will:
auto v2 = v1 | std::view::common;
auto it = std::find(begin(v2), end(v2), 'G'_dna5);

◆ drop

constexpr auto std::ranges::view::drop
inline

A range adaptor that returns all elements from the underlying range after count.

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
[in]countThe number of elements to skip.
Returns
Up to size elements of the underlying range.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange preserved
std::ranges::BidirectionalRange preserved
std::ranges::RandomAccessRange preserved
std::ranges::ContiguousRange preserved
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange lost
std::ranges::CommonRange lost
std::ranges::OutputRange preserved
seqan3::ConstIterableRange preserved
seqan3::reference_t seqan3::reference_t<urng_t>

See the view submodule documentation for detailed descriptions of the view properties.

◆ drop_while

constexpr auto std::ranges::view::drop_while
inline

A range adaptor that drops elements from the underlying range as long as the functor evaluates to true (and returns the rest).

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
fun_tThe type of the functor; must model std::IndirectUnaryPredicate with std::ranges::iterator_t<urng_t>.
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
[in]funThe functor.
Returns
All elements of the underlying range beginning from the first element on which the predicate evaluates to false.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange depends on functor (see below)
std::ranges::BidirectionalRange depends on functor (see below)
std::ranges::RandomAccessRange depends on functor (see below)
std::ranges::ContiguousRange depends on functor (see below)
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange lost
std::ranges::CommonRange lost
std::ranges::OutputRange preserved
seqan3::ConstIterableRange depends on functor (see below)
seqan3::reference_t seqan3::reference_t<urng_t>

See the view submodule documentation for detailed descriptions of the view properties.

This view only preserves certain concepts if and only if the specified functor also models std::IndirectRegularUnaryInvocable<fun_t, reference_t<urng_t>, i.e. applying the functor doesn't change the functor.

◆ filter

constexpr auto std::ranges::view::filter
inline

A range adaptor that takes a predicate and returns a view of the elements that satisfy the predicate.

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
predicate_tThe type of the predicate, must model std::Predicate.
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
[in,out]predicateThe predicate.
Returns
A range of those elements in the underlying range that satisfy the predicate.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange preserved
std::ranges::BidirectionalRange preserved
std::ranges::RandomAccessRange lost
std::ranges::ContiguousRange lost
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange lost
std::ranges::CommonRange lost
std::ranges::OutputRange preserved
seqan3::ConstIterableRange lost
seqan3::reference_t seqan3::reference_t<urng_t>

See the view submodule documentation for detailed descriptions of the view properties.

Example

dna5_vector s{"ACTNTGATAN"_dna5};
auto v1 = s | std::view::filter([](dna5 const l) { return (l != 'N'_dna5); }); // == "ACTTGATA"_dna5

◆ iota

constexpr auto std::ranges::view::iota
inline

Generates a sequence of elements by repeatedly incrementing an initial value.

Template Parameters
init_tType of the initial value, must be incrementable.
bound_tType of the bound value (optional); must be weakly equality comparable with init_t.
Parameters
[in]initInitial value (the first value returned).
[in]boundBound value (the last value returned); optional, infinite if not provided.
Returns
A sequence of elements continuously incremented.

View properties

This view is source-only, it can only be at the beginning of a pipe of range transformations.

range concepts and reference_t rrng_t (returned range type)
std::ranges::InputRange guaranteed
std::ranges::ForwardRange if std::Incrementable<init_t>
std::ranges::BidirectionalRange if init_t provides operator--
std::ranges::RandomAccessRange if init_t provides +, -, += and -= with integral
std::ranges::ContiguousRange
std::ranges::ViewableRange guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange if bound is provided and bound - init is valid and in O(1)
std::ranges::CommonRange
std::ranges::OutputRange
seqan3::ConstIterableRange guaranteed
seqan3::reference_t init_t

See the view submodule documentation for detailed descriptions of the view properties.

◆ join

constexpr auto std::ranges::view::join
inline

Flattens a View of ranges into a View.

Template Parameters
init_tType of the initial value, must be incrementable.
bound_tType of the bound value (optional); must be weakly equality comparable with init_t.
Parameters
[in]initInitial value (the first value returned).
[in]boundBound value (the last value returned); optional, infinite if not provided.
Returns
A sequence of elements continuously incremented.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange preserved ¹
std::ranges::BidirectionalRange preserved ¹
std::ranges::RandomAccessRange lost
std::ranges::ContiguousRange lost
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange lost
std::ranges::CommonRange preserved ¹²
std::ranges::OutputRange preserved ¹
seqan3::ConstIterableRange preserved ¹²
seqan3::reference_t std::ranges::InputRange && std::ranges::ViewableRange seqan3::reference_t<seqan3::reference_t<urng_t>>

¹ This depends on urng_t and seqan3::reference_t<urng_t>.
² This also requires that seqan3::reference_t<urng_t> is an lvalue reference.

See the view submodule documentation for detailed descriptions of the view properties.

◆ reverse

constexpr auto std::ranges::view::reverse
inline

A range adaptor that presents the underlying range in reverse order.

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
Returns
A view of the elements of the underlying range in reverse order.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange required preserved
std::ranges::BidirectionalRange required preserved
std::ranges::RandomAccessRange preserved
std::ranges::ContiguousRange lost
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange preserved
std::ranges::CommonRange preserved
std::ranges::OutputRange lost
seqan3::ConstIterableRange preserved if std::ranges::CommonRange<urng_t>
seqan3::reference_t seqan3::reference_t<urng_t>

See the view submodule documentation for detailed descriptions of the view properties.

Example

std::string s{"ACTNTGATAN"};
auto v1 = s | std::view::reverse; // == "NATAGTNTCA"

◆ single

constexpr auto std::ranges::view::single
inline

Given a value, produces a view that contains exactly one element.

Template Parameters
value_tType of the value; must model std::CopyConstructible.
Parameters
[in]valueThe value to create the view for.
Returns
A range that contains one element with the specified value.

View properties

This view is source-only, it can only be at the beginning of a pipe of range transformations.

range concepts and reference_t rrng_t (returned range type)
std::ranges::InputRange guaranteed
std::ranges::ForwardRange guaranteed
std::ranges::BidirectionalRange guaranteed
std::ranges::RandomAccessRange guaranteed
std::ranges::ContiguousRange guaranteed
std::ranges::ViewableRange guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange guaranteed
std::ranges::CommonRange guaranteed
std::ranges::OutputRange guaranteed
seqan3::ConstIterableRange guaranteed
seqan3::reference_t value_t &

See the view submodule documentation for detailed descriptions of the view properties.

◆ split

constexpr auto std::ranges::view::split
inline

Takes a View and a delimiter, and splits the View into subranges on the delimiter.

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
delimiter_tType of the split pattern; most model std::ranges::ForwardRange.
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
[in]delimiterThe target size of the view.
Returns
Up to size elements of the underlying range.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type) seqan3::reference_t<rrng_t>
std::ranges::InputRange required preserved preserved
std::ranges::ForwardRange preserved preserved
std::ranges::BidirectionalRange lost lost
std::ranges::RandomAccessRange lost lost
std::ranges::ContiguousRange lost lost
std::ranges::ViewableRange required guaranteed guaranteed
std::ranges::View guaranteed guaranteed
std::ranges::SizedRange lost lost
std::ranges::CommonRange lost lost
std::ranges::OutputRange lost lost
seqan3::ConstIterableRange preserved preserved
seqan3::reference_t see to the right seqan3::reference_t<urng_t>

See the view submodule documentation for detailed descriptions of the view properties.

◆ take

constexpr auto std::ranges::view::take
inline

A range adaptor that returns the first size elements from the underlying range (or less if the underlying range is shorter).

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
[in]sizeThe target size of the view.
Returns
Up to size elements of the underlying range.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange preserved
std::ranges::BidirectionalRange preserved
std::ranges::RandomAccessRange preserved
std::ranges::ContiguousRange preserved
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange lost
std::ranges::CommonRange lost
std::ranges::OutputRange preserved
seqan3::ConstIterableRange preserved
seqan3::reference_t seqan3::reference_t<urng_t>

See the view submodule documentation for detailed descriptions of the view properties.

◆ take_while

constexpr auto std::ranges::view::take_while
inline

A range adaptor that returns elements from the underlying range until the functor evaluates to false (or the end of the underlying range is reached).

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
fun_tThe type of the functor; must model std::IndirectUnaryPredicate with std::ranges::iterator_t<urng_t>.
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
[in]funThe functor.
Returns
All elements of the underlying range up until (but excluding) the element that evaluates the functor to false.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange depends on functor (see below)
std::ranges::BidirectionalRange depends on functor (see below)
std::ranges::RandomAccessRange depends on functor (see below)
std::ranges::ContiguousRange depends on functor (see below)
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange lost
std::ranges::CommonRange lost
std::ranges::OutputRange preserved
seqan3::ConstIterableRange depends on functor (see below)
seqan3::reference_t seqan3::reference_t<urng_t>

See the view submodule documentation for detailed descriptions of the view properties.

This view only preserves certain concepts if and only if the specified functor also models std::IndirectRegularUnaryInvocable<fun_t, reference_t<urng_t>, i.e. applying the functor doesn't change the functor.

◆ transform

constexpr auto std::ranges::view::transform
inline

A range adaptor that takes a invocable and returns a view of the elements with the invocable applied.

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
invocable_tThe type of the invocable, must model std::Invocable.
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
[in,out]invocableThe invocable (usually a lambda function).
Returns
A range of the elements produced by applied the invocable to each element in the underlying range.

View properties

range concepts and reference_t urng_t (underlying range type) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange preserved
std::ranges::BidirectionalRange preserved
std::ranges::RandomAccessRange preserved
std::ranges::ContiguousRange lost
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange preserved
std::ranges::CommonRange preserved
std::ranges::OutputRange lost
seqan3::ConstIterableRange preserved
seqan3::reference_t decltype(invocable(seqan3::reference_t<urng_t>{}))

See the view submodule documentation for detailed descriptions of the view properties.

Example

std::string s{"ACTNTGATAN"};
auto v1 = s | std::view::transform([](dna4 const l) { return to_char(l); }); // == "ACTNTGATAN"

◆ zip

constexpr auto std::ranges::view::zip
inline

A range adaptor that transforms a tuple of range into a range of tuples.

Template Parameters
urng_tsThe types of the ranges being processed. See below for requirements.
Parameters
[in]urangesThe ranges being processed.
Returns
A view of n-sized-tuples where n is the number of underlying ranges the i-thof size n of the elements produced by applied the invocable to each element in the underlying range.

View properties

This view is source-only, it can only be at the beginning of a pipe of range transformations. The "underlying ranges" refer to the mandatory parameters of this adaptor, not a previous range in a pipe.

range concepts and reference_t urng_ts (underlying ranges) rrng_t (returned range type)
std::ranges::InputRange required preserved
std::ranges::ForwardRange preserved
std::ranges::BidirectionalRange preserved
std::ranges::RandomAccessRange preserved
std::ranges::ContiguousRange lost
std::ranges::ViewableRange required guaranteed
std::ranges::View guaranteed
std::ranges::SizedRange preserved
std::ranges::CommonRange lost
std::ranges::OutputRange lost
seqan3::ConstIterableRange preserved
seqan3::reference_t std::tuple<std::reference_t<urng_ts...>>

The guarantees for the returned range type only hold if the respective requirements are met by all underlying ranges.

See the view submodule documentation for detailed descriptions of the view properties.