https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70141
--- Comment #8 from Alexander Kondratskiy <kholdstare0.0 at gmail dot com> --- I'm sorry Markus, but "clang issues a warning" is not a good enough reason to mark this invalid. By the same token, the warning in clang could have been introduced "because gcc issues an error". What happened to independent implementations? The example you gave: template <typename T> struct X {}; template <typename T> struct X<typename T::foo> {}; is not the same situation as I posted originally. Here, the nested type foo is nested inside a type trying to be deduced. I would never expect this to work, and I agree with clang that it should be an error My original example is closer to something like: struct outer{ template <typename T> struct foo { }; }; template <typename T> struct X {}; template <typename T> struct X<outer::foo<T>> {}; The outer type is concrete here, and in my original example. Please, take another look. Thank you.