https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94057
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> --- The root cause isn't the C++20 feature it seems. The following version with explicit 'typename' is rejected, but compiles fine with clang/icc: template <typename T> class A { template <typename U> class B { B(typename A<T>::B<U>&); void fn(typename A<T>::B<U> &); }; };