Namespaces
Variants

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

ja.cppreference.net より
 
 
範囲ライブラリ
範囲アダプタ
 
 
/*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) は ranges::join_with_view の begin() と end() によって呼ばれる。

 多重定義  データメンバ
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) データメンバを初期化した後、あたかも 内部イテレータ が 外部イテレータ によって operator++() だけインクリメントされたかのように
を調整する。

パラメータ

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

例