std::indirectly_writable
| ヘッダ <iterator> で定義 |
||
| template< class Out, class T > concept indirectly_writable = |
(C++20以降) | |
コンセプト indirectly_writable<Out, T> は、`T` によってエンコードされた型と値カテゴリを持つ値を、イテレータ `Out` が参照するオブジェクトに書き込むための要件を指定します。
[edit] 意味的要件
e を、decltype((e)) が T であるような式とし、`o` を Out 型のデリファレンス可能なオブジェクトとすると、indirectly_writable<Out, T> は以下の場合にのみモデル化されます。
- もし std::indirectly_readable<Out> がモデル化され、かつ std::iter_value_t<Out> が std::decay_t<T> と同じ型である場合、上記のいずれかの代入の後での *o は、代入前の
eの値に等しくなります。
上記の代入式のいずれかを評価した後、`o` がデリファレンス可能であることは要求されません。もし `e` が xvalue の場合、それが示すオブジェクトの結果の状態は有効ですが未指定です。
[編集] 等価性保持
標準ライブラリのコンセプトのrequires式で宣言された式は、(特に明記されていない限り)等価性保持である必要があります。
[edit] 注記
operator* の有効な使用法は、代入式の左辺のみです。間接的に書き込み可能な型の同じ値に対する代入は、一度しか発生しない可能性があります。
const_cast を伴う必須の式は、prvalue の reference 型を持つ indirectly_readable オブジェクトが偶然 indirectly_writable の構文要件を満たしてしまうことを防ぎますが、プロキシ参照がそれらの const 性が浅い限り引き続き機能することを許可します。 Ranges TS issue 381 を参照してください。