std::is_invocable,std::is_invocable_r,std::is_nothrow_invocable, (3) Linux Manual Page
std::is_invocable,std::is_invocable_r,std::is_nothrow_invocable, – std::is_invocable,std::is_invocable_r,std::is_nothrow_invocable,
Synopsis
Defined in header<type_traits>
template <class Fn, class... ArgTypes>
(1)(since C++ 17)
struct is_invocable;
template <class R, class Fn, class... ArgTypes>
(2)(since C++ 17)
struct is_invocable_r;
template <class Fn, class... ArgTypes>
(3)(since C++ 17)
struct is_nothrow_invocable;
template <class R, class Fn, class... ArgTypes>
(4)(since C++ 17)
struct is_nothrow_invocable_r;
1)
determines whether INVOKE(declval<Fn>(), declval<ArgTypes>()…)
treated as an unevaluated operand, where INVOKE is the operation defined in
Callable.
2)
result that is convertible to R. Formally, determines whether
INVOKE<R>(declval<Fn>(), declval<ArgTypes>()…)
unevaluated operand, where INVOKE is the operation defined in Callable
3)
and that such call is known not to throw any exceptions.
4)
result that is convertible to R
conversion)
Fn, R and all types in the parameter pack ArgTypes shall each be a complete type,
(possibly cv-qualified)
is undefined.
If an instantiation of a template above depends, directly or indirectly, on an
incomplete type, and that instantiation could yield a different result if that type
were hypothetically completed, the behavior is undefined.
Defined in header <type_traits>
template <class Fn, class... ArgTypes>
inline constexpr bool is_invocable_v = std::is_invocable<Fn, (1) (since C++17)
ArgTypes...>::value;
template <class R, class Fn, class... ArgTypes>
inline constexpr bool is_invocable_r_v = std::is_invocable_r<R, (2) (since C++17)
Fn, ArgTypes...>::value;
template <class Fn, class... ArgTypes>
inline constexpr bool is_nothrow_invocable_v = (3) (since C++17)
std::is_nothrow_invocable<Fn, ArgTypes...>::value;
template <class R, class Fn, class... ArgTypes>
inline constexpr bool is_nothrow_invocable_r_v = (4) (since C++17)
std::is_nothrow_invocable_r<R, Fn, ArgTypes...>::value;
Inherited from std::integral_constant
Member constants
value
[static]
Member functions
operator bool converts the object to bool, returns value
operator()
(C++14)
Member types
Type
value_type bool
type
Examples
// Run this code
#include <type_traits>
auto func2(char) -> int (*)()
{
return nullptr;
}
int main()
{
static_assert(std::is_invocable<int()>::value);
static_assert(std::is_invocable_r<int, int()>::value);
static_assert(std::is_invocable_r<void, void(int), int>::value);
static_assert(std::is_invocable_r<int (*)(), decltype(func2), char>::value);
}
See also
invoke
(C++17)
result_of
invoke_result
(C++11)(removed in C++20)
(C++17)
declval
(C++11)
