https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94057
Bug ID: 94057 Summary: [9/10 Regression] -std=gnu++20 causes failure naming nested templated class Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: romain.geissler at amadeus dot com Target Milestone: --- Hi, The following snippet fails with gcc trunk and with gcc 9 if I compile with -std=gnu++20, but not with -std=gnu++17. gcc <= 8 or any clang version happily compiles it whatever -std value I use. template <typename T> class A { template <typename... Types> class B { B(const A<T>::B<Types...>&) = default; }; }; It reads: <source>:5:23: error: 'typename A<T>::B' names 'template<class T> template<class ... Types> class A<T>::B', which is not a type 5 | B(const A<T>::B<Types...>&) = default; | ^~~~~~~~~~~ <source>:5:34: error: expected unqualified-id before '&' token 5 | B(const A<T>::B<Types...>&) = default; | ^ <source>:5:34: error: expected ')' before '&' token 5 | B(const A<T>::B<Types...>&) = default; | ~ ^ | ) <source>:5:34: error: constructors may not be ref-qualified <source>:5:34: error: expected ';' at end of member declaration 5 | B(const A<T>::B<Types...>&) = default; | ^ | ; <source>:5:35: error: expected unqualified-id before ')' token 5 | B(const A<T>::B<Types...>&) = default; | ^ Compiler returned: 1 Cheers, Romain