为什么operator() with type argument可以应用于result_of上下文中的type?
Why does operator () with type argument can be applied to type in the context of result_of?
据我了解,result_of_t
应该是一种类型,它将在表达式求值的末尾。 decltype(&foo)
在下面的代码中产生类型 int (*)(int)
,但是 (int)
在 decltype
之外是什么?
#include <type_traits>
int foo(int) {
return 0xdeadbeef;
}
int main()
{
using T = std::result_of_t<decltype(&foo)(int)>;
T t;
return 0;
}
but what does (int) outside of decltype?
这让我们很困惑。 std::result_of
以 "cute" 方式定义。它专用于 F(Args...)
。其中 F
是仿函数类型,而 Args...
是输入给它的参数。
在您的例子中,(int)
是调用的参数。
这和定义的某些其他怪癖是 std::result_of
在 C++17 中被弃用并替换为 std::invoke_result
的原因。
据我了解,result_of_t
应该是一种类型,它将在表达式求值的末尾。 decltype(&foo)
在下面的代码中产生类型 int (*)(int)
,但是 (int)
在 decltype
之外是什么?
#include <type_traits>
int foo(int) {
return 0xdeadbeef;
}
int main()
{
using T = std::result_of_t<decltype(&foo)(int)>;
T t;
return 0;
}
but what does (int) outside of decltype?
这让我们很困惑。 std::result_of
以 "cute" 方式定义。它专用于 F(Args...)
。其中 F
是仿函数类型,而 Args...
是输入给它的参数。
在您的例子中,(int)
是调用的参数。
这和定义的某些其他怪癖是 std::result_of
在 C++17 中被弃用并替换为 std::invoke_result
的原因。