std::is_invocable, std::is_invocable_r, std::is_nothrow_invocable, std::is_nothrow_invocable_r
来自cppreference.com
| 在标头 <type_traits> 定义
|
||
| |
(1) | (C++17 起) |
| |
(2) | (C++17 起) |
| |
(3) | (C++17 起) |
| |
(4) | (C++17 起) |
1) 确定 INVOKE
(std::declval<Fn>(), std::declval<ArgTypes>()...) 在作为不求值操作数时是否良构。2) 确定 INVOKE<R>
(std::declval<Fn>(), std::declval<ArgTypes>()...) 在作为不求值操作数时是否良构。3) 确定 INVOKE
(std::declval<Fn>(), std::declval<ArgTypes>()...) 在作为不求值操作数时是否良构,以及是否已知这种调用不抛任何异常。4) 确定 INVOKE<R>
(std::declval<Fn>(), std::declval<ArgTypes>()...) 在作为不求值操作数时是否良构,以及是否已知这种调用不抛任何异常。如果 Fn, R 或形参包 ArgTypes 中的任何类型不是完整类型,(可有 cv 限定的)void 或未知边界数组,那么行为未定义。
如果上述模板的实例化直接或间接地依赖于不完整类型,并且假设在该类型完整的情况下实例化就会产生不同的结果,那么行为未定义。
如果程序添加了此页面上描述的任何模板的特化,那么行为未定义。
辅助变量模板
| 在标头 <type_traits> 定义
|
||
| |
(1) | (C++17 起) |
| |
(2) | (C++17 起) |
| |
(3) | (C++17 起) |
| |
(4) | (C++17 起) |
继承自 std::integral_constant
成员常量
value [静态] |
如果 (对于重载 (1))INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...) 在被当做不求值操作数时为良构那么是 true,否则是 false (公开静态成员常量) |
成员函数
operator bool |
将对象转换到 bool,返回 value (公开成员函数) |
operator() (C++14) |
返回 value (公开成员函数) |
成员类型
| 类型 | 定义 |
value_type
|
bool
|
type
|
std::integral_constant<bool, value>
|
注解
| 功能特性测试宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__cpp_lib_is_invocable |
201703L |
(C++17) | std::is_invocable, std::invoke_result
|
示例
运行此代码
#include <type_traits>
auto func2(char) -> int (*)()
{
return nullptr;
}
int main()
{
static_assert(std::is_invocable_v<int()>);
static_assert(not std::is_invocable_v<int(), int>);
static_assert(std::is_invocable_r_v<int, int()>);
static_assert(not std::is_invocable_r_v<int*, int()>);
static_assert(std::is_invocable_r_v<void, void(int), int>);
static_assert(not std::is_invocable_r_v<void, void(int), void>);
static_assert(std::is_invocable_r_v<int(*)(), decltype(func2), char>);
static_assert(not std::is_invocable_r_v<int(*)(), decltype(func2), void>);
}
