名前空間
変種
操作

std::indirectly_writable

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
indirectly_writable
(C++20)
イテレータのプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
(C++20)
(C++20)
(C++20)
ユーティリティ
(C++20)
イテレータアダプタ
Rangeアクセス
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
ヘッダ <iterator> で定義
template< class Out, class T >

    concept indirectly_writable =
        requires(Out&& o, T&& t) {
            *o = std::forward<T>(t);
            *std::forward<Out>(o) = std::forward<T>(t);
            const_cast<const std::iter_reference_t<Out>&&>(*o) = std::forward<T>(t);
            const_cast<const std::iter_reference_t<Out>&&>(*std::forward<Out>(o)) =
                std::forward<T>(t);
        };

        /* none of the four expressions above are required to be equality-preserving */
(C++20以降)

コンセプト indirectly_writable<Out, T> は、`T` によってエンコードされた型と値カテゴリを持つ値を、イテレータ `Out` が参照するオブジェクトに書き込むための要件を指定します。

[edit] 意味的要件

e を、decltype((e))T であるような式とし、`o` を Out 型のデリファレンス可能なオブジェクトとすると、indirectly_writable<Out, T> は以下の場合にのみモデル化されます。

上記の代入式のいずれかを評価した後、`o` がデリファレンス可能であることは要求されません。もし `e` が xvalue の場合、それが示すオブジェクトの結果の状態は有効ですが未指定です。

[編集] 等価性保持

標準ライブラリのコンセプトのrequiresで宣言された式は、(特に明記されていない限り)等価性保持である必要があります。

[edit] 注記

operator* の有効な使用法は、代入式の左辺のみです。間接的に書き込み可能な型の同じ値に対する代入は、一度しか発生しない可能性があります。

const_cast を伴う必須の式は、prvalue の reference 型を持つ indirectly_readable オブジェクトが偶然 indirectly_writable の構文要件を満たしてしまうことを防ぎますが、プロキシ参照がそれらの const 性が浅い限り引き続き機能することを許可します。 Ranges TS issue 381 を参照してください。

English 日本語 中文(简体) 中文(繁體)