Namespaces
Variants

std:: is_invocable, std:: is_invocable_r, std:: is_nothrow_invocable, std:: is_nothrow_invocable_r

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
(C++11)
(C++11)
(C++11)
is_invocable is_invocable_r is_nothrow_invocable is_nothrow_invocable_r
(C++17) (C++17) (C++17) (C++17)
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Défini dans l'en-tête <type_traits>
template < class Fn, class ... ArgTypes >
struct is_invocable ;
(1) (depuis C++17)
template < class R, class Fn, class ... ArgTypes >
struct is_invocable_r ;
(2) (depuis C++17)
template < class Fn, class ... ArgTypes >
struct is_nothrow_invocable ;
(3) (depuis C++17)
template < class R, class Fn, class ... ArgTypes >
struct is_nothrow_invocable_r ;
(4) (depuis C++17)
1) Détermine si INVOKE ( std:: declval < Fn > ( ) , std:: declval < ArgTypes > ( ) ... ) est bien formé lorsqu'il est traité comme un opérande non évalué.
2) Détermine si INVOKE<R> ( std:: declval < Fn > ( ) , std:: declval < ArgTypes > ( ) ... ) est bien formé lorsqu'il est traité comme un opérande non évalué.
3) Détermine si INVOKE ( std:: declval < Fn > ( ) , std:: declval < ArgTypes > ( ) ... ) est bien formé lorsqu'il est traité comme un opérande non évalué, et qu'il est connu pour ne lever aucune exception.
4) Détermine si INVOKE<R> ( std:: declval < Fn > ( ) , std:: declval < ArgTypes > ( ) ... ) est bien formé lorsqu'il est traité comme un opérande non évalué, et qu'il est connu pour ne lever aucune exception.

Si Fn, R ou tout type dans le pack de paramètres ArgTypes n'est pas un type complet, (éventuellement qualifié cv) void , ou un tableau de limite inconnue, le comportement est indéfini.

Si une instanciation d'un template ci-dessus dépend, directement ou indirectement, d'un type incomplet, et que cette instanciation pourrait produire un résultat différent si ce type était hypothétiquement complété, le comportement est indéfini.

Si le programme ajoute des spécialisations pour l'un des modèles décrits sur cette page, le comportement est indéfini.

Table des matières

Modèles de variables d'assistance

Défini dans l'en-tête <type_traits>
template < class Fn, class ... ArgTypes >

inline constexpr bool is_invocable_v =

std :: is_invocable < Fn, ArgTypes... > :: value ;
(1) (depuis C++17)
template < class R, class Fn, class ... ArgTypes >

inline constexpr bool is_invocable_r_v =

std :: is_invocable_r < R, Fn, ArgTypes... > :: value ;
(2) (depuis C++17)
template < class Fn, class ... ArgTypes >

inline constexpr bool is_nothrow_invocable_v =

std :: is_nothrow_invocable < Fn, ArgTypes... > :: value ;
(3) (depuis C++17)
template < class R, class Fn, class ... ArgTypes >

inline constexpr bool is_nothrow_invocable_r_v =

std :: is_nothrow_invocable_r < R, Fn, ArgTypes... > :: value ;
(4) (depuis C++17)

Hérité de std:: integral_constant

Constantes membres

value
[static]
true si (pour la surcharge (1) ) INVOKE ( std:: declval < Fn > ( ) , std:: declval < ArgTypes > ( ) ... ) est bien formé lorsqu'il est traité comme un opérande non évalué, false sinon
(constante membre publique statique)

Fonctions membres

operator bool
convertit l'objet en bool , retourne value
(fonction membre publique)
operator()
(C++14)
retourne value
(fonction membre publique)

Types membres

Type Définition
value_type bool
type std:: integral_constant < bool , value >

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_is_invocable 201703L (C++17) std::is_invocable , std::invoke_result

Exemples

#include <type_traits>
auto func2(char) -> int (*)()
{
    return nullptr;
}
int main()
{
    static_assert(std::is_invocable_v<int()>);
    static_assert(not std::is_invocable_v<int(), int>);
    static_assert(std::is_invocable_r_v<int, int()>);
    static_assert(not std::is_invocable_r_v<int*, int()>);
    static_assert(std::is_invocable_r_v<void, void(int), int>);
    static_assert(not std::is_invocable_r_v<void, void(int), void>);
    static_assert(std::is_invocable_r_v<int(*)(), decltype(func2), char>);
    static_assert(not std::is_invocable_r_v<int(*)(), decltype(func2), void>);
}

Voir aussi

(C++17) (C++23)
invoque tout Callable objet avec les arguments donnés et possibilité de spécifier le type de retour (depuis C++23)
(modèle de fonction)
(C++11) (supprimé en C++20) (C++17)
déduit le type de résultat de l'invocation d'un objet appelable avec un ensemble d'arguments
(modèle de classe)
(C++11)
obtient une référence à un objet du type d'argument du modèle pour utilisation dans un contexte non évalué
(modèle de fonction)
spécifie qu'un type appelable peut être invoqué avec un ensemble donné de types d'arguments
(concept)