https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78367

            Bug ID: 78367
           Summary: Out-of-line definitions fail to match in-line
                    declarations with decltype and template arguments
           Product: gcc
           Version: 6.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bugs at qult dot net
  Target Milestone: ---

The following code doesn't compile with -std=gnu++11 in any of GCC 4.9.4, 5.4.1
or 6.2.0:

#include <utility>

struct Bar {
  void  meth(int) {}
};

struct Foo {
  template <class T>
  decltype(std::declval<Bar>().meth(std::declval<T>()))
  call_meth(T v);
};

template <class T>
decltype(std::declval<Bar>().meth(std::declval<T>()))
Foo::call_meth(T v)
{ return Bar{}.meth(v); }

The compile complains that the out-of-line definition doesn't match the in-line
declaration.

This code compiles with Clang.

Reply via email to