std::experimental::ranges:: Writable
|
Определено в заголовочном файле
<experimental/ranges/iterator>
|
||
|
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, результирующее состояние объекта, который он обозначает, является допустимым, но неопределенным.
Сохранение равенства
Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.
- Входные данные выражения состоят из его операндов.
- Выходные данные выражения состоят из его результата и всех операндов, измененных выражением (если таковые имеются).
Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные результаты при отсутствии каких-либо явных изменений этих входных объектов между вычислениями.
Примечания
Единственное допустимое использование operator * — в левой части выражения присваивания. Присваивание через одно и то же значение записываемого типа может произойти только один раз.
Необходимые выражения с
const_cast
предотвращают случайное удовлетворение синтаксических требований
Readable
объектов с prvalue
reference
типами для
Writable
, при этом позволяя прокси-ссылкам продолжать работать до тех пор, пока их константность является поверхностной. См.
Ranges TS issue 381
.