std::ranges::join_view<V>:: iterator <Const>:: iterator

From cppreference.com
Ranges library
Range adaptors
/*iterator*/ ( ) requires std:: default_initializable < OuterIter > &&
std:: default_initializable < InnerIter > = default ;
(1) (since C++20)
constexpr /*iterator*/ ( Parent & parent, OuterIter outer ) ;
(2) (since C++20)
constexpr /*iterator*/ ( /*iterator*/ < ! Const > i )

requires Const &&
std:: convertible_to < ranges:: iterator_t < V > , OuterIter > &&

std:: convertible_to < ranges:: iterator_t < InnerRng > , InnerIter > ;
(3) (since C++20)

Constructs an iterator.

1) Default constructor. Value-initializes the underlying iterators, and initializes the pointer to parent ranges::join_view with nullptr .
2) Initializes the underlying outer_ iterator with std :: move ( outer ) , and the pointer to parent parent_ with std:: addressof ( parent ) ; then calls satisfy() .
3) Converts /*iterator*/ < false > to /*iterator*/ < true > . Move constructs the underlying iterators outer_ with std :: move ( i. outer_ ) , inner_ with std :: move ( i. inner_ ) , and underlying pointer to parent parent_ with i. parent_ .

Parameters

parent - a (possibly const-qualified) ranges::join_view
outer - an iterator into (possibly const-qualified) ranges:: iterator_t < Base >
i - an /*iterator*/ < false >

Example