[Bug c++/57543] decltype needs explicit 'this' pointer in member function declaration of template class with trailing return type

d.frey at gmx dot de gcc-bugzilla@gcc.gnu.org
Sun Dec 1 13:40:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57543

Daniel Frey <d.frey at gmx dot de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |d.frey at gmx dot de

--- Comment #2 from Daniel Frey <d.frey at gmx dot de> ---
Here's another short example which seems to expose the same bug:

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

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

int main()
{
  X<int>().bar();
}

Note that the decltype in //1 causes the problem, not the body of the function.
Changing //1 to decltype(foo()) fails with the same error message, changing it
to either decltype(this->foo()) or decltype(std::declval<X>().foo()) solves the
problem and GCC accepts the code. Also note that Clang compiles all versions
just fine.

The bug seems to occur in unevaluated contexts and only for templates. If you
change the above class X to be a non-template GCC accepts the code as well.



More information about the Gcc-bugs mailing list