Sdílet prostřednictvím


is_invocable, is_invocable_r, is_nothrow_invocable, třídy is_nothrow_invocable_r

Tyto šablony určují, zda lze typ vyvolat pomocí zadaných typů argumentů. is_invocable_r a is_nothrow_invocable_r také určete, jestli je výsledek vyvolání konvertibilní na určitý typ. is_nothrow_invocable a is_nothrow_invocable_r také určete, zda vyvolání není známo, že vyvolání vyvolání nevyvolá výjimky. Přidáno v jazyce C++17.

Syntaxe

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;

Parametry

Callable
Volatelný typ pro dotaz.

Args
Typy argumentů, které se mají dotazovat.

Kabriolet
Typ výsledku volatelného volání musí být konvertibilní na.

Poznámky

Predikát is_invocable typu má hodnotu true, pokud lze volání volatelného typu pomocí argumentů Args v nehodnocený kontext.

Predikát is_invocable_r typu má hodnotu true, pokud lze volatelný typ Callable pomocí argumentů Args v nehodnocený kontext vytvořit typ výsledku se sklápěcí na Sklápěcí typ.

Predikát is_nothrow_invocable typu má hodnotu true, pokud lze volání volatelného typu volání pomocí argumentů Args v nehodnoceného kontextu a že takové volání není známo, že vyvolá výjimku.

Predikát is_nothrow_invocable_r typu má hodnotu true, pokud lze volatelný typ Callable pomocí argumentů Args v nehodnocený kontext vytvořit typ výsledku se sklápěcí na Sklápěcí, a že takové volání není známo, že vyvolá výjimku.

Každý z typů Konvertibilní, Volatelné a typy v sadě parametrů Args musí být úplný typ, pole neznámé vazby nebo případně cv-qualified void. Jinak je chování predikátu nedefinované.

Příklad

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

Požadavky

Header:<type_traits>

Obor názvů: std

Viz také

<type_traits>
Vyvolat