std::experimental::ranges:: Writable
|
template
<
class
Out,
class
T
>
concept
bool
Writable
=
|
(ranges TS) | |
Writable<Out, T>
コンセプトは、
T
によってエンコードされる型と値カテゴリを持つ値を、
イテレータ
Out
の参照先オブジェクトに書き込むための要件を定義します。
E
を
decltype
(
(
E
)
)
が
T
となる式とし、
o
を型
Out
のデリファレンス可能なオブジェクトとするとき、
Writable<Out, T>
は以下の条件を満たす場合にのみ成立する:
-
Readable
<
Out
>
&&
Same
<
ranges
::
value_type_t
<
Out
>
,
std::
decay_t
<
T
>>
が満たされる場合、上記のいずれかの代入後の
*
o
は代入前の
Eの値と等しくなります。
o
は、上記の代入式のいずれかを評価した後、デリファレンス可能である必要はありません。
E
がxvalueの場合、それが示すオブジェクトの結果の状態は有効ですが未指定です。
等価性保存
式は、等しい入力が与えられた場合に等しい出力をもたらす場合、 equality preserving であると言います。
- 式への入力は、そのオペランドで構成されます。
- 式からの出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。
等価性を保持することが要求されるすべての式は、さらに stable(安定性) が要求されます:同じ入力オブジェクトに対するそのような式の2回の評価は、それらの入力オブジェクトに対する明示的な変更がない限り、等しい出力を持たなければなりません。
注記
有効な使用法は operator * を代入式の左辺に置く場合のみです。書き込み可能な型の同じ値を通じた代入は一度だけ行われる可能性があります。
const_cast
を用いた必要な式は、prvalueの
reference
型を持つ
Readable
オブジェクトが誤って
Writable
の構文要件を満たすことを防ぎつつ、プロキシ参照についてはそのconst性が浅い限り引き続き機能することを許可します。詳細は
Ranges TS issue 381
を参照してください。