https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118347
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Here is one without a default template argument: ``` template<typename T, typename T1> struct holder { template<typename F> struct fn {}; template<typename T2> struct t2 : holder<T, T2>::fn<T1> {}; // fail }; template<> struct holder<int, int> { template<typename T1> struct fn : holder<int, float>::fn<int> {}; // fail }; holder<int, float>::t2<int> holder_1; ``` There is no ambigous of what <T1> means here since it can't be `less than` because it would not be a name.