【发布时间】:2013-08-16 23:45:20
【问题描述】:
以下代码在 msvc v120(预览版编译器)上编译
template<typename T>
struct X
{
int f() const { return 0; }
auto g() -> decltype(f()) const { return f(); }
};
int main()
{
X<int> x;
return 0;
}
gcc 4.8.1 报错信息
不能在没有对象的情况下调用成员函数'int X::f() const
将g 更改为
auto g() -> decltype(this->f()) const { return f(); }
解决了 gcc 的问题,但现在是 msvc 输出
C2355: 'this' : 只能在非静态成员中引用 功能
知道在这两种情况下我做错了什么吗?
【问题讨论】:
-
C++14 中自动推导的返回类型解决了这个问题。
-
我的直觉表明两者都应该是有效的。再说一次,这是我们正在谈论的C++......
-
请注意,上面没有理由使用尾随返回类型。
-
@BillyONEal 是的。我敢肯定在很多情况下都需要尾随返回类型,例如
f中涉及的模板 -
@a.lasram:据我了解,这就是将它们添加到语言中的原因。虽然我敢打赌
declval减轻了对大多数情况的需求。
标签: c++ visual-c++ gcc c++11