Namespaces
Variants

std::experimental::ranges:: Writable

From cppreference.net
Défini dans l'en-tête <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 ) ;
} ;

/* aucune des quatre expressions ci-dessus n'est requise pour préserver l'égalité */
(ranges TS)

Le concept Writable<Out, T> spécifie les exigences pour écrire une valeur dont le type et la catégorie de valeur sont encodés par T dans l'objet référencé par un itérateur Out .

Soit E une expression telle que decltype ( ( E ) ) soit T , et o un objet déréférençable de type Out , alors Writable<Out, T> est satisfait seulement si :

  • Si Readable < Out > && Same < ranges :: value_type_t < Out > , std:: decay_t < T >> est satisfait, alors * o après toute affectation ci-dessus est égal à la valeur de E avant l'affectation.

o n'est pas requis d'être déréférençable après l'évaluation de l'une quelconque des expressions d'affectation ci-dessus. Si E est une xvalue, l'état résultant de l'objet qu'elle désigne est valide mais non spécifié.

Préservation de l'égalité

Une expression est préservatrice d'égalité si elle produit des résultats égaux pour des entrées égales.

  • Les entrées d'une expression consistent en ses opérandes.
  • Les sorties d'une expression consistent en son résultat et tous les opérandes modifiés par l'expression (le cas échéant).

Toute expression devant préserver l'égalité doit en outre être stable : deux évaluations d'une telle expression avec les mêmes objets d'entrée doivent produire des sorties égales en l'absence de toute modification explicite intervenant entre-temps de ces objets d'entrée.

Notes

La seule utilisation valide de operator * est sur le côté gauche d'une expression d'assignation. L'assignation via la même valeur d'un type modifiable ne peut se produire qu'une seule fois.

Les expressions requises avec const_cast empêchent les objets Readable ayant des types reference prvalue de satisfaire accidentellement aux exigences syntaxiques de Writable , tout en permettant aux références proxy de continuer à fonctionner tant que leur constance est superficielle. Voir Ranges TS issue 381 .