다음을 통해 공유


is_invocable, is_invocable_r, is_nothrow_invocable, is_nothrow_invocable_r 클래스

이러한 템플릿은 지정된 인수 형식을 사용하여 형식을 호출할 수 있는지 여부를 결정합니다. is_invocable_r 호출 is_nothrow_invocable_r 결과를 특정 형식으로 변환할 수 있는지 여부도 확인합니다. is_nothrow_invocable 호출 is_nothrow_invocable_r 이 예외를 throw하지 않는 것으로 알려져 있는지 여부도 확인합니다. C++17에 추가되었습니다.

구문

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;

매개 변수

호출할
쿼리할 호출 가능 형식입니다.

Args
쿼리할 인수 형식입니다.

컨버터블
Callable의 결과를 변환할 수 있어야 하는 형식입니다.

설명

호출 가능한 형식 호출 가능 형식이 is_invocable 평가되지 않은 컨텍스트에서 인수 인수 인수를 사용하여 호출할 수 있는 경우 형식 조건자는 true입니다.

is_invocable_r 호출 가능한 형식 호출 가능 형식을 평가되지 않은 컨텍스트의 인수 인수를 사용하여 호출할 수 있는 경우 형식 조건자는 true를 유지하여 Convertible로 변환할 수 있는 결과 형식을 생성합니다.

호출 가능한 형식 호출 가능 형식이 is_nothrow_invocable 평가되지 않은 컨텍스트에서 인수 인수를 사용하여 호출할 수 있고 이러한 호출이 예외를 throw하지 않는 것으로 알려진 경우 형식 조건자는 true입니다.

is_nothrow_invocable_r 호출 가능한 형식 호출 가능 형식을 변환 가능으로 변환할 수 있는 결과 형식을 생성하기 위해 평가되지 않은 컨텍스트에서 인수 인수 인수를 사용하여 호출할 수 있고 이러한 호출이 예외를 throw하지 않는 것으로 알려진 경우 형식 조건자는 true입니다.

컨버터블, 호출 가능 형식 및 매개 변수 팩 인수각 형식은 완전한 형식, 알 수 없는 바인딩된 배열 또는 가능한 cv 정규화 void형식이어야 합니다. 그렇지 않으면 조건자의 동작이 정의되지 않습니다.

예시

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

요구 사항

헤더:<type_traits>

네임스페이스: std

참고 항목

<type_traits>
invoke