std::is_invocable, std::is_invocable_r, std::is_nothrow_invocable, std::is_nothrow_invocable_r
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    |   定义于头文件  <type_traits>
  | 
||
|   template <class Fn, class... ArgTypes> struct is_invocable;  | 
(1) | (C++17 起) | 
|   template <class R, class Fn, class... ArgTypes> struct is_invocable_r;  | 
(2) | (C++17 起) | 
|   template <class Fn, class... ArgTypes> struct is_nothrow_invocable;  | 
(3) | (C++17 起) | 
|   template <class R, class Fn, class... ArgTypes> struct is_nothrow_invocable_r;  | 
(4) | (C++17 起) | 
1) 确定是否能以参数 
ArgTypes... 调用 Fn 。正式而言,确定 INVOKE(declval<Fn>(), declval<ArgTypes>()...) 在被当做不求值运算数时是否为良式,其中 INVOKE 是 可调用 (Callable)  中定义的运算。2) 确定是否能以参数 
ArgTypes... 调用 Fn 并生成可转换为 R 的结果。正式而言,确定 INVOKE<R>(declval<Fn>(), declval<ArgTypes>()...) 在被当做不求值运算数时是否为良式,其中 INVOKE 是 可调用 (Callable)  中定义的运算。3) 确定是否能以参数 
ArgTypes... 调用 Fn (同 (1) ),并已知这种调用不抛任何异常。4) 确定是否能以参数 
ArgTypes... 调用 Fn 并生成可转换为 R 的结果(同 (2) ),并已知这种调用(包括转换)不抛任何异常。Fn, R 与参数包 ArgTypes 中的所有类型应均为完整类型、(可为 cv 限定的) void ,或未知边界数组。否则行为未定义。
若上述模板的实例化直接或间接地依赖于不完整类型,并且如果假如使该类型完整,实例化就会产生不同的结果,则行为未定义。
添加此页面上描述的任何模板的特化的程序行为未定义。
辅助变量模板
|   定义于头文件  <type_traits>
  | 
||
|   template <class Fn, class... ArgTypes> inline constexpr bool is_invocable_v = std::is_invocable<Fn, ArgTypes...>::value;  | 
(1) | (C++17 起) | 
|   template <class R, class Fn, class... ArgTypes> inline constexpr bool is_invocable_r_v = std::is_invocable_r<R, Fn, ArgTypes...>::value;  | 
(2) | (C++17 起) | 
|   template <class Fn, class... ArgTypes> inline constexpr bool is_nothrow_invocable_v = std::is_nothrow_invocable<Fn, ArgTypes...>::value;  | 
(3) | (C++17 起) | 
|   template <class R, class Fn, class... ArgTypes> inline constexpr bool is_nothrow_invocable_r_v = std::is_nothrow_invocable_r<R, Fn, ArgTypes...>::value;  | 
(4) | (C++17 起) | 
继承自 std::integral_constant
成员常量
|    value [静态]  | 
   若 INVOKE<R>(declval<Fn>(), declval<ArgTypes>()...) 在被当做不求值运算数时为良式 则为 true ,否则为 false  (公开静态成员常量)  | 
成员函数
|    operator bool  | 
   转换对象为 bool ,返回 value  (公开成员函数)  | 
|    operator() (C++14)  | 
   返回 value  (公开成员函数)  | 
成员类型
| 类型 | 定义 | 
  value_type
 | 
  bool
 | 
  type
 | 
std::integral_constant<bool, value> | 
示例
运行此代码
#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 ); }
 
参阅
|    (C++17)  | 
  以给定实参调用任意可调用 (Callable) 对象  (函数模板)  | 
|    (C++11)(C++20 中移除)(C++17)  | 
  推导以一组实参调用一个可调用对象的结果类型  (类模板)  | 
|    (C++11)  | 
   获取到其实参的引用,用于不求值语境中  (函数模板)  |