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

            Bug ID: 90572
           Summary: Wrong disambiguation in friend declaration as implicit
                    typename context
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: blitzrakete at gmail dot com
  Target Milestone: ---

template <typename T> struct C {
  friend C(T::fn)();  // not implicit typename context, declarator-id of friend
                      // declaration
};

Courtesy of rsmith. gcc fails to compile this with -std=c++2a, but accepts it
in C++17 mode.

<source>:11:19: error: ISO C++ forbids declaration of 'C' with no type
[-fpermissive]

   11 |   friend C(T::fn)();  // not implicit typename context, declarator-id
of friend

      |                   ^

<source>:11:19: error: 'C' declared as function returning a function

gcc interprets this as a function taking a T::fn and returning a function,
while it should be a function returning C taking no parameters with the
(qualified) name T::fn.

Reply via email to