std::experimental::ranges:: Writable
|
Definido en el encabezado
<experimental/ranges/iterator>
|
||
|
template
<
class
Out,
class
T
>
concept
bool
Writable
=
|
(ranges TS) | |
El concepto
Writable<Out, T>
especifica los requisitos para escribir un valor cuyo tipo y categoría de valor están codificados por
T
en el objeto referenciado por un iterador
Out
.
Sea
E
una expresión tal que
decltype
(
(
E
)
)
es
T
, y
o
un objeto dereferenciable de tipo
Out
, entonces
Writable<Out, T>
se satisface solo si:
-
Si
Readable
<
Out
>
&&
Same
<
ranges
::
value_type_t
<
Out
>
,
std::
decay_t
<
T
>>
se satisface, entonces
*
o
después de cualquier asignación anterior es igual al valor de
Eantes de la asignación.
o
no es necesario que sea desreferenciable después de evaluar cualquiera de las expresiones de asignación anteriores. Si
E
es un xvalue, el estado resultante del objeto que denota es válido pero no especificado.
Preservación de la igualdad
Una expresión es equality preserving si produce salidas iguales dadas entradas iguales.
- Las entradas de una expresión consisten en sus operandos.
- Las salidas de una expresión consisten en su resultado y todos los operandos modificados por la expresión (si los hay).
Toda expresión que deba preservar la igualdad debe además ser estable : dos evaluaciones de dicha expresión con los mismos objetos de entrada deben tener salidas iguales, a menos que exista una modificación explícita e intermedia de esos objetos de entrada.
Notas
El único uso válido de operator * es en el lado izquierdo de una expresión de asignación. La asignación a través del mismo valor de un tipo escribible puede ocurrir solo una vez.
Las expresiones requeridas con
const_cast
evitan que objetos
Readable
con tipos prvalue
reference
satisfagan los requisitos sintácticos de
Writable
accidentalmente, mientras permiten que las referencias proxy continúen funcionando siempre que su constancia sea superficial. Consulte
Ranges TS issue 381
.