From cppreference.com
template<boolConst>class/*iterator*/(exposition only*)ranges::join_with_view<V,Pattern>::iterator is the type of the iterators returned by
and
of ranges::join_with_view<V,Pattern>.
The state of an iterator of this class is managed as if there are two nested iterators:
an outer iterator into the parent range *
If Base models
, it is
.
Otherwise, it is
->
.
an inner iterator
into the pattern range
->
or into a child range of the parent range
This iterator class has the invariant that the inner iterator is always dereferenceable unless the outer iterator is not dereferenceable. When an iterator is constructed, incremented or decremented, its outer iterator might be adjusted to hold the invariant.
Template parameters
Const - whether the iterator is a constant iterator Nested types
Exposition-only types Type Definition Parent
<Const,ranges::join_with_view<V,Pattern>>
(exposition-only member type*)Base
<Const,V>
(exposition-only member type*)InnerBaseranges::range_reference_t<Base>
(exposition-only member type*)PatternBase
<Const,Pattern>
(exposition-only member type*)OuterIterranges::iterator_t<Base>
(exposition-only member type*)InnerIterranges::iterator_t<InnerBase>
(exposition-only member type*)PatternIterranges::iterator_t<PatternBase>
(exposition-only member type*) Iterator property types Type Definition iterator_conceptan
,
iterator_category
(conditionally present)an iterator tag,
value_typestd::common_type_t<ranges::range_value_t<InnerBase>,
ranges::range_value_t<PatternBase>>
difference_typestd::common_type_t<ranges::range_difference_t<Base>,
ranges::range_difference_t<InnerBase>,
ranges::range_difference_t<PatternBase>>
Determining the iterator concept
iterator_concept is defined as follows:
If all following conditions are satisfied, iterator_concept denotes
std::bidirectional_iterator_tag
: std::is_reference_v<InnerBase> is true.
Base models
.
InnerBase and PatternBase each model
.
Otherwise, if all following conditions are satisfied, iterator_concept denotes
: std::is_reference_v<InnerBase> is true.
Base and InnerBase each model
.
Otherwise, iterator_concept denotes
.
Determining the iterator category
Given the following types:
Let OuterC be std::iterator_traits<OuterIter>::iterator_category.
Let InnerC be std::iterator_traits<InnerIter>::iterator_category.
Let PatternC be std::iterator_traits<PatternIter>::iterator_category.
iterator_category is defined if and only if std::is_reference_v<InnerBase> is true, and Base and InnerBase each model
. In this case, it is defined as follows:
If std::is_reference_v<std::common_reference_t<ranges::range_reference_t<InnerBase>,
ranges::range_reference_t<PatternBase>> is false, iterator_category denotes
.
Otherwise, if all following conditions are satisfied, iterator_category denotes
std::bidirectional_iterator_tag
: OuterC, InnerC, and PatternC each model std::derived_from<std::bidirectional_iterator_tag>.
InnerBase and PatternBase each model
.
Otherwise, if OuterC, InnerC, and PatternC each model std::derived_from<std::forward_iterator_tag>, iterator_category denotes
.
Otherwise, iterator_category denotes
.
Data members
Member Description Parent*parent_the pointer to the parent
(exposition-only member object*)OuterIterouter_it_
(present only if Base models
)the outer iterator
(exposition-only member object*)std::variant<PatternIter,InnerIter>inner_it_the inner iterator
(exposition-only member object*)Member functions
Non-member functions
(C++23)
compares the underlying iterators
(function)(C++23)
casts the result of dereferencing the underlying iterator to its associated rvalue reference type
(function)(C++23)
swaps the objects pointed to by two underlying iterators
(function)