以下代码在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':只能在非静态成员中引用 功能
知道在任何一种情况下我做错了什么?
答案 0 :(得分:2)
首先关闭另一个数据点:clang编译原始代码和修改后的版本。我想,这对你来说并没有多大帮助。根据我的直观理解,代码应该是正确的,但直觉可能很棘手,我怀疑浏览标准会花费很长时间告诉你gcc和MSVC ++都是错误的,它也不会帮助你。
您可能希望尝试以下解决方法:
auto g() -> decltype(std::declval<X const>().f()) const { return f(); }
std::declval<>()
在<utility>
中声明。