https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107889
Bug ID: 107889 Summary: Incorrect parsing of qualified friend function returning decltype(auto) Product: gcc Version: 12.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: gcc at nospam dot scs.stanford.edu Target Milestone: --- G++ 12.2.0 rejects a valid friend declaration for a fully-qualified function returning `decltype(auto)`. To reproduce the problem, you can try to compile the following code with `g++ -std=c++20 -c bug.cc`: decltype(auto) f() { } struct S { friend decltype(auto) ::f(); }; This results in the following error: $ c++ -std=c++20 -c bug.cc bug.cc:7:27: error: 'decltype(auto)' is not a class type 7 | friend decltype(auto) ::f(); | ^ bug.cc:7:27: error: 'decltype(auto)' is not a class type bug.cc:7:27: error: 'decltype(auto)' is not a class type bug.cc:7:29: error: 'decltype(auto)' is not a class type 7 | friend decltype(auto) ::f(); | ^ bug.cc:7:10: error: ISO C++ forbids declaration of 'f' with no type [-fpermissive] 7 | friend decltype(auto) ::f(); | ^~~~~~~~~~~~~~ bug.cc:7:29: error: invalid use of 'decltype(auto)' 7 | friend decltype(auto) ::f(); A similar problem was reported in bug #59766 for friend functions returning auto. It seems to have been mostly fixed, but the combination of decltype(auto) and the function name being qualified (::f) is still a problem.