std::experimental::ranges:: Writable
|
Défini dans l'en-tête
<experimental/ranges/iterator>
|
||
|
template
<
class
Out,
class
T
>
concept
bool
Writable
=
|
(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
Eavant 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
.