Namespaces
Variants

std:: invocable, std:: regular_invocable

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

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

} ;
(depuis C++20)
template < class F, class ... Args >
concept regular_invocable = std :: invocable < F, Args... > ;
(depuis C++20)

Le concept invocable spécifie qu'un type appelable F peut être appelé avec un ensemble d'arguments Args... en utilisant le modèle de fonction std::invoke .

Le concept regular_invocable complète le concept invocable en exigeant que l'expression invoke soit préservatrice d'égalité et ne modifie ni l'objet fonction ni les arguments.

Table des matières

Préservation de l'égalité

Les expressions déclarées dans les requires expressions des concepts de la bibliothèque standard doivent être equality-preserving (sauf indication contraire).

Notes

La distinction entre invocable et regular_invocable est purement sémantique.

Un générateur de nombres aléatoires peut satisfaire invocable mais ne peut pas satisfaire regular_invocable ( les générateurs comiques exclus).

Références

  • Norme C++23 (ISO/IEC 14882:2024) :
  • 18.7.2 Concept invocable [concept.invocable]
  • 18.7.3 Concept regular_invocable [concept.regularinvocable]
  • Norme C++20 (ISO/CEI 14882:2020) :
  • 18.7.2 Concept invocable [concept.invocable]
  • 18.7.3 Concept regular_invocable [concept.regularinvocable]

Voir aussi

vérifie si un type peut être invoqué (comme par std::invoke ) avec les types d'arguments donnés
(modèle de classe)

Liens externes

Un exemple humoristique d'un générateur de nombres aléatoires qui satisfait à la fois invocable et regular_invocable .