【发布时间】:2015-04-21 12:43:47
【问题描述】:
我设法将我的案例简化为以下最简单的代码:
#include <type_traits>
auto call(const auto& f) -> typename std::result_of<decltype(f)()>::type
{
return f();
}
int main()
{
return call([] { return 0; });
}
gcc-4.9.2 和 gcc-5.0.0 都不编译!
两者都认为“调用”应该返回一个 lambda 函数! 不知道“调用”返回一个整数。
这是编译器中的错误还是我的 c++ 关闭? 非常感谢。
【问题讨论】:
-
这不是你称呼
std::result_of的方式,应该是typename std::result_of<decltype(f)()>::type。或者更简单,你可以写decltype(f())。 -
@Paul 这看起来是对的,如果作为答案发布会更好。你打算这样做吗?
-
在 gcc 4.9 中,
auto被允许作为参数。见here -
@Paul 不过,它并没有按照文档的方式实现。众所周知,它有缺陷。
-
@hvd 现在,the buggy implementation 实际上忽略了尾随返回类型,并将占位符
auto也转换为T。