is_invocable, is_invocable_r, is_nothrow_invocable, is_nothrow_invocable_r (Clases)

Estas plantillas determinan si un tipo se puede invocar con los tipos de argumento especificados. is_invocable_r e is_nothrow_invocable_r también determinan si el resultado de la invocación se puede convertir en un tipo específico. is_nothrow_invocable e is_nothrow_invocable_r también determinan si se tiene constancia de que la invocación no produce excepciones. Se incluyó en C++17.

Sintaxis

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;

Parámetros

Accesible
El tipo que se puede llamar para la consulta.

Args
Tipos de argumento que se van a consultar.

Convertible
Tipo al que debe poder convertirse el resultado de Callable.

Comentarios

El predicado de tipo is_invocable es true si el tipo al que se puede llamar (Callable) se puede invocar mediante los argumentos Args en un contexto no evaluado.

El predicado de tipo is_invocable_r es true si el tipo al que se puede llamar (Callable) se puede invocar mediante los argumentos Args en un contexto no evaluado para generar un tipo de resultado que se puede convertir a Convertible.

El predicado de tipo is_nothrow_invocable es true si el tipo al que se puede llamar (Callable) se puede invocar mediante los argumentos Args en un contexto no evaluado, y si se tiene constancia de que dicha invocación no produce excepciones.

El predicado de tipo is_nothrow_invocable_r es true si el tipo al que se puede llamar (Callable) se puede invocar mediante los argumentos Args en un contexto no evaluado para generar un tipo de resultado que se puede convertir a Convertible, y si se tiene constancia de que dicha invocación no produce excepciones.

Cada uno de los tipos Convertible y Callable, así como los tipos del paquete de parámetros Args, deben ser un tipo completo, una matriz de límite desconocido o posiblemente un tipo cv-qualified void. De lo contrario, el comportamiento del predicado no está definido.

Ejemplo

// 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
}

Requisitos

Encabezado:<type_traits>

Espacio de nombres: std

Consulte también

<type_traits>
invoke