https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78065
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- If you use typedefs instead of alias declarations then all of GCC, Clang, EDG and MSVC agree: template<typename T> struct foo { typedef struct some_struct sub; }; template<typename T> struct bar { typedef struct some_struct { } sub; }; This declares a type ::some_struct and a temploid bar<T>::some_struct So this is a bug in EDG and MSVC regarding alias-declarations at class scope.