Namespaces
Variants

std::experimental::ranges:: Invocable, std::experimental::ranges:: RegularInvocable

From cppreference.net
Défini dans l'en-tête <experimental/ranges/concepts>
template < class F, class ... Args >

concept bool Invocable =
requires ( F && f, Args && ... args ) {
ranges:: invoke ( std:: forward < F > ( f ) , std:: forward < Args > ( args ) ... ) ;
/* non requis d'être préservant l'égalité */

} ;
(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 ).