https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97297
Bug ID: 97297 Summary: typename wrongly required in out-of-class member function definitions Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: mpolacek at gcc dot gnu.org Target Milestone: --- This should compile with -std=c++20 due to P0634R3: template <typename T> struct S { int simple(T::type); template <typename U> int member(U::type); }; template <typename T> int S<T>::simple(T::type) { // we still wrongly require 'typename' here... return 1; } template <typename T> template <typename U> int S<T>::member(U::type) { // ...and here return 2; } [temp.res]/5.2.4 covers the out-of-class member function definitions.