https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87910
Bug ID: 87910 Summary: Missing typename/template not diagnosed Product: gcc Version: 9.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: --- While working on P0634 I noticed that the following testcase is accepted while it probably shouldn't be: template<typename T> struct A { template<typename U> struct B; template<typename U> using C = U; }; template<typename T> A<T>::B<T> f1(); template<typename T> A<T>::C<T> f2(); The dependent names "A<T>::B<T>" should be prefixed by the typename keyword, and the template keyword should come after ::. With P0634 that typename will no longer be required[*] but I think it still requires "::template". [*] it is a decl-specifier of the decl-specifier-seq of a simple-declaration or a function-definition in namespace scope