"无法调用成员函数...没有对象"在未评估的背景下 - GCC错误?

时间:2013-12-01 12:26:17

标签: c++ gcc c++11

以下程序与Clang编译良好:

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

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

int main()
{
  X<int>().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();
            ^

Live example

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

这是GCC中的一个错误(现有错误报告还是应该报告?)或者我的代码有什么问题吗?