std::indirectly_writable
Definido en el archivo de encabezado <iterator>
|
||
template<class Out, class T> concept indirectly_writable = |
(desde C++20) | |
El concepto indirectly_writable<Out, T>
(indirectamente escribible) especifica los requerimientos para escribir un valor cuyo tipo y categoría de valor se codifican por T
en el objeto al que hace referencia un iterador Out
.
[editar] Requerimientos semánticos
Dejemos que e
sea una expresión tal que decltype((e)) es T
, y o
es un objeto desreferenciable de tipo Out
, entonces indirectly_writable<Out, T>
se modela solo si:
- Si se modela std::indirectly_readable<Out> y std::iter_value_t<Out> es el mismo tipo que std::decay_t<T>, entonces
*o
después de cualquiera de las asignaciones anteriores es igual al valor dee
antes de la asignación.
No se requiere que o
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 sin especificar.
[editar] Conservación de la igualdad
Una expresión es conservadora de igualdad si resulta en 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 es que los hay).
Cada expresión que se requiere sea conservadora de igualdad, se requiere además que sea estable: dos evaluaciones de tal expresión con los mismos objetos de entrada debe tener salidas iguales si no se encuentra alguna modificación interventora de esos objetos de entrada.
[editar] 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 indirectamente escribible puede suceder solamente una vez.
Las expresiones requeridas con const_cast
previenen que los objetos indirectly_readable
con tipos referencia
prvalue reference
satisfagan los requerimientos sintácticos de indirectly_writable
por accidente, mientras que permiten que referencias proxy sigan funcionando siempre y cuando su constancia (constness) sea superficial. Véase Ranges TS problema 381.