【发布时间】:2016-03-07 15:48:47
【问题描述】:
以下内容在 gcc 和 clang 上都无法编译
#include <type_traits>
int foo();
int main()
{
using R = std::result_of_t<decltype(foo)()>; // error
}
两个编译器上的错误都涉及声明函数返回函数的非法性。但我没有声明这样的函数——我只是想写它的类型——因为这是result_of 所期望的。这真的还是病态吗?
【问题讨论】:
-
我认为这个“两个编译器上的错误都处理了声明函数返回函数的非法性。”将有用地替换为实际错误
-
你为什么不直接使用
decltype(foo())? -
你不能形成一个函数类型,该函数返回另一个函数类型。 “函数不应有类型数组或函数的返回类型”dcl.fct/8
-
将语句更改为
using R = std::result_of_t<decltype(foo)&()>;可以根据需要进行操作。
标签: c++ language-lawyer c++14 result-of