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