Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | types
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
Beziehungen und Eigenschaftsabfragen
(C++11)
(C++11)
(C++11)
is_invocableis_invocable_ris_nothrow_invocableis_nothrow_invocable_r
(C++17)(C++17)(C++17)(C++17)
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 
Definiert in der Kopfdatei <type_traits>
template< class Fn, class... ArgTypes >
struct is_invocable;
(1) (seit C++17)
template< class R, class Fn, class... ArgTypes >
struct is_invocable_r;
(2) (seit C++17)
template< class Fn, class... ArgTypes >
struct is_nothrow_invocable;
(3) (seit C++17)
template< class R, class Fn, class... ArgTypes >
struct is_nothrow_invocable_r;
(4) (seit C++17)
1) Bestimmt, ob INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...) als unevaluierter Operand wohlgeformt ist.
2) Bestimmt, ob INVOKE<R>(std::declval<Fn>(), std::declval<ArgTypes>()...) als unevaluierter Operand wohlgeformt ist.
3) Bestimmt, ob INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...) als unevaluierter Operand wohlgeformt ist und bekanntermaßen keine Ausnahmen auslöst.
4) Bestimmt, ob INVOKE<R>(std::declval<Fn>(), std::declval<ArgTypes>()...) als unevaluierter Operand wohlgeformt ist und bekanntermaßen keine Ausnahmen auslöst.

Wenn Fn, R oder ein Typ im Parameter-Pack ArgTypes kein vollständiger Typ, (möglicherweise cv-qualifiziertes) void oder ein Array unbekannter Größe ist, ist das Verhalten undefiniert.

Wenn eine Instanziierung einer Vorlage davon direkt oder indirekt von einem unvollständigen Typ abhängt und diese Instanziierung ein anderes Ergebnis liefern könnte, wenn dieser Typ hypothetisch vervollständigt würde, ist das Verhalten undefiniert.

Wenn das Programm Spezialisierungen für eine der auf dieser Seite beschriebenen Vorlagen hinzufügt, ist das Verhalten undefiniert.

Inhalt

[edit] Hilfsvariablentemplates

Definiert in der Kopfdatei <type_traits>
template< class Fn, class... ArgTypes >

inline constexpr bool is_invocable_v =

    std::is_invocable<Fn, ArgTypes...>::value;
(1) (seit 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) (seit C++17)
template< class Fn, class... ArgTypes >

inline constexpr bool is_nothrow_invocable_v =

    std::is_nothrow_invocable<Fn, ArgTypes...>::value;
(3) (seit 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) (seit C++17)

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn (für Überladung (1)) INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...) als unevaluierter Operand wohlgeformt ist, sonst false
(öffentliche statische Member-Konstante)

Memberfunktionen

operator bool
konvertiert das Objekt zu bool, gibt value zurück
(öffentliche Memberfunktion)
operator()
(C++14)
gibt value zurück
(öffentliche Memberfunktion)

Membertypen

Typ Definition
value_type bool
type std::integral_constant<bool, value>

[edit] Anmerkungen

Feature-Test-Makro Wert Std Feature
__cpp_lib_is_invocable 201703L (C++17) std::is_invocable, std::invoke_result

[edit] Beispiele

#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>);
}

[edit] Siehe auch

(C++17)(C++23)
ruft jedes Callable-Objekt mit gegebenen Argumenten auf und der Möglichkeit, den Rückgabetyp anzugeben(seit C++23)
(Funktions-Template) [bearbeiten]
(C++11)(entfernt in C++20)(C++17)
leitet den Ergebnistyp der Invokation eines aufrufbaren Objekts mit einer Reihe von Argumenten ab
(Klassenvorlage) [bearbeiten]
(C++11)
erhält eine Referenz auf ein Objekt des Typ-Template-Arguments zur Verwendung in einem nicht-ausgewerteten Kontext
(Funktionsvorlage) [edit]
gibt an, dass ein aufrufbarer Typ mit einem gegebenen Satz von Argumenttypen aufgerufen werden kann
(Konzept) [bearbeiten]