Condividi tramite


classi is_invocable, is_invocable_r, is_nothrow_invocable e is_nothrow_invocable_r

Questi modelli determinano se un tipo può essere richiamato con i tipi di argomento specificati. is_invocable_r e is_nothrow_invocable_r determinare anche se il risultato della chiamata è convertibile in un tipo specifico. is_nothrow_invocable e is_nothrow_invocable_r determinare anche se la chiamata non è nota per generare eccezioni. Aggiunta in C++17.

Sintassi

template <class Callable, class... Args>
struct is_invocable;

template <class Convertible, class Callable, class... Args>
struct is_invocable_r;

template <class Callable, class... Args>
struct is_nothrow_invocable;

template <class Convertible, class Callable, class... Args>
struct is_nothrow_invocable_r;

// Helper templates
template <class Callable, class... Args>
inline constexpr bool is_invocable_v =
    std::is_invocable<Callable, Args...>::value;

template <class Convertible, class Callable, class... Args>
inline constexpr bool is_invocable_r_v =
    std::is_invocable_r<Convertible, Callable, Args...>::value;

template <class Callable, class... Args>
inline constexpr bool is_nothrow_invocable_v =
    std::is_nothrow_invocable<Callable, Args...>::value;

template <class Convertible, class Callable, class... Args>
inline constexpr bool is_nothrow_invocable_r_v =
    std::is_nothrow_invocable_r<Convertible, Callable, Args...>::value;

Parametri

Callable
Tipo chiamabile su cui eseguire una query.

Args
Tipi di argomento da eseguire per la query.

Decappottabile
Il tipo in cui deve essere convertibile il risultato di Callable .

Osservazioni:

Il is_invocable predicato di tipo contiene true se il tipo chiamabile Callable può essere richiamato usando gli argomenti Args in un contesto non valutato.

Il is_invocable_r predicato di tipo contiene true se il tipo chiamabile Callable può essere richiamato usando gli argomenti Args in un contesto non valutato per produrre un tipo di risultato convertibile in Convertibile.

Il is_nothrow_invocable predicato di tipo contiene true se il tipo chiamabile Callable può essere richiamato utilizzando gli argomenti Args in un contesto non valutato e che tale chiamata non è nota per generare un'eccezione.

Il is_nothrow_invocable_r predicato di tipo contiene true se il tipo chiamabile Callable può essere richiamato utilizzando gli argomenti Args in un contesto non valutato per produrre un tipo di risultato convertibile in Convertibile e che tale chiamata non è nota per generare un'eccezione.

Ognuno dei tipi Convertibile, Chiamabile e i tipi nel pacchetto di parametri Args devono essere un tipo completo, una matrice di limiti sconosciuti o un eventualmente qualificato cvvoid. In caso contrario, il comportamento del predicato non è definito.

Esempio

// std__type_traits__is_invocable.cpp
// compile using: cl /EHsc /std:c++17 std__type_traits__is_invocable.cpp
#include <type_traits>

auto test1(int) noexcept -> int (*)()
{
    return nullptr;
}

auto test2(int) -> int (*)()
{
    return nullptr;
}

int main()
{
    static_assert( std::is_invocable<decltype(test1), short>::value );

    static_assert( std::is_invocable_r<int(*)(), decltype(test1), int>::value );
    static_assert( std::is_invocable_r<long(*)(), decltype(test1), int>::value ); // fails

    static_assert( std::is_nothrow_invocable<decltype(test1), int>::value );
    static_assert( std::is_nothrow_invocable<decltype(test2), int>::value ); // fails

    static_assert( std::is_nothrow_invocable_r<int(*)(), decltype(test1), int>::value );
    static_assert( std::is_nothrow_invocable_r<int(*)(), decltype(test2), int>::value ); // fails
}

Requisiti

Intestazione:<type_traits>

Spazio dei nomi: std

Vedi anche

<type_traits>
invoke