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
This PR might get resolved by <https://gcc.gnu.org/pipermail/gcc-patches/2020-March/542599.html>.
Confirmed.