std::experimental::ranges:: Invocable, std::experimental::ranges:: RegularInvocable
|
Défini dans l'en-tête
<experimental/ranges/concepts>
|
||
|
template
<
class
F,
class
...
Args
>
concept
bool
Invocable
=
|
(ranges TS) | |
|
template
<
class
F,
class
...
Args
>
concept bool RegularInvocable = Invocable < F, Args... > ; |
(ranges TS) | |
Le concept
Invocable
spécifie qu'un type appelable
F
peut être invoqué avec un ensemble de types d'arguments
Args...
en utilisant le modèle de fonction
ranges::invoke
.
Le concept
RegularInvocable
ajoute au concept
Invocable
en exigeant que l'expression
invoke
soit préservatrice d'égalité et ne modifie ni l'objet fonction ni les arguments.
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.
Sauf indication contraire, toute expression utilisée dans une requires-expression doit être égalité-préservante et stable, et l'évaluation de l'expression ne peut modifier que ses opérandes non constants. Les opérandes constants ne doivent pas être modifiés.
Notes
La distinction entre
Invocable
et
RegularInvocable
est purement sémantique.
Un générateur de nombres aléatoires peut satisfaire
Invocable
mais ne peut pas satisfaire
RegularInvocable
(les
versions comiques
exceptées
).