Namespaces
Variants

std::experimental::ranges:: Writable

From cppreference.net
Definido en el encabezado <experimental/ranges/iterator>
template < class Out, class T >

concept bool Writable =
requires ( Out && o, T && t ) {
* o = std:: forward < T > ( t ) ;
* std:: forward < Out > ( o ) = std:: forward < T > ( t ) ;
const_cast < const ranges :: reference_t < Out > && > ( * o ) =
std:: forward < T > ( t ) ;
const_cast < const ranges :: reference_t < Out > && > ( * std:: forward < Out > ( o ) ) =
std:: forward < T > ( t ) ;
} ;

/* ninguna de las cuatro expresiones anteriores necesita preservar la igualdad */
(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 E antes 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 .