Namespaces
Variants

std::ranges::join_with_view<V,Pattern>:: iterator <Const>:: iterator

From cppreference.net
Ranges library
Range adaptors
/*iterator*/ ( ) = default ;
(1) (C++23以降)
constexpr /*iterator*/ ( /*iterator*/ < ! Const > i )

requires Const &&
std:: convertible_to < ranges:: iterator_t < V > , /*OuterIter*/ > &&
std:: convertible_to < ranges:: iterator_t < /*InnerRng*/ > ,
/*InnerIter*/ > &&

std:: convertible_to < ranges:: iterator_t < Pattern > , /*PatternIter*/ > ;
(2) (C++23以降)
constexpr /*iterator*/ ( /*Parent*/ & parent, /*OuterIter*/ outer )
requires std:: forward_range < /*Base*/ > ;
(3) (C++23以降)
( 説明専用* )
constexpr explicit /*iterator*/ ( /*Parent*/ parent )
requires ( ! std:: forward_range < /*Base*/ > ) ;
(4) (C++23以降)
( 説明専用* )

イテレータを構築します。オーバーロード (3,4) は、 begin() および end() によって ranges::join_with_view から呼び出されます。

オーバーロード データメンバ
parent_ outer_it_ inner_it_
(1) nullptr で初期化 値初期化
( Base forward_range をモデル化する場合のみ)
デフォルト初期化
(2) i. parent_ で初期化 std :: move ( i. outer_it_ で初期化
( Base forward_range をモデル化する場合のみ)
(3) std:: addressof ( parent ) で初期化 std :: move ( outer ) で初期化
(4) 該当なし
2) データメンバの初期化後、以下と同等:

if ( i. inner_it_  . index ( ) == 0 )
inner_it_  . template emplace < 0 > ( std :: get < 0 > ( std :: move ( i. inner_it_  ) ) ) ;
else
inner_it_  . template emplace < 1 > ( std :: get < 1 > ( std :: move ( i. inner_it_  ) ) ) ;

.
3,4) データメンバの初期化後、 outer iterator を、 inner iterator operator++() によってインクリメントされたかのように調整します。

パラメータ

i - 変更可能なイテレータ
parent - std::ranges::join_with_view オブジェクト
outer - parent の基盤となる範囲へのイテレータ