C++ &引用;无法调用成员函数。。。“无对象”;在未评估的上下文中-GCC错误?

C++ &引用;无法调用成员函数。。。“无对象”;在未评估的上下文中-GCC错误?,c++,gcc,c++11,C++,Gcc,C++11,下面的程序编译得非常好: template< typename > struct X { void foo() {} auto bar() -> decltype( X::foo() ) { return foo(); } }; int main() { X<int>().bar(); } templatestruct X { void foo(){} 自动栏()->decltype(X::foo()) { 返回foo(); } }

下面的程序编译得非常好:

template< typename > struct X
{
  void foo() {}

  auto bar() -> decltype( X::foo() )
  {
    return foo();
  }
};

int main()
{
  X<int>().bar();
}
templatestruct X
{
void foo(){}
自动栏()->decltype(X::foo())
{
返回foo();
}
};
int main()
{
X().bar();
}
但GCC 4.8.1给出了:

main.cpp: In instantiation of 'struct X<int>':
main.cpp:13:10:   required from here
main.cpp:5:34: error: cannot call member function 'void X< <template-parameter-1-1> >::foo() [with <template-parameter-1-1> = int]' without object
   auto bar() -> decltype( X::foo() )
                                  ^
main.cpp: In function 'int main()':
main.cpp:13:12: error: 'struct X<int>' has no member named 'bar'
   X<int>().bar();
            ^
main.cpp:在“struct X”的实例化中:
main.cpp:13:10:从这里开始需要
main.cpp:5:34:错误:无法在没有对象的情况下调用成员函数'void X<>::foo()[with=int]'
自动栏()->decltype(X::foo())
^
main.cpp:在函数“int main()”中:
main.cpp:13:12:错误:“struct X”没有名为“bar”的成员
X().bar();
^

当我将代码更改为
decltype(std::declval().foo())
GCC编译它

这是GCC中的一个错误(是否有现有的错误报告或应该报告?)还是我的代码有任何错误?

可能是这个错误?-dyp


是的,这是gcc中的一个bug,至少我很清楚。如果还没有报告,我会感到惊讶,但我不知道(我没有费心,只是简单地避免了它)。
decltype(this->foo())
编译,而
decltype(foo())
不编译。编译器错误的强烈提示。可能是这个错误吗@DyP感谢您挖掘这篇文章,我在错误报告中添加了一条注释,希望它能帮助他们找到它。@DanielFrey clang 3.4(trunk 194324)编译您的代码,可执行文件运行良好。