https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64961
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- No it isn't the same. Foo<1> is a public member of bar::Bar ([class]/2 "For purposes of access checking, the injected-class-name is treated as if it were a public member name.") Ba is a protected member of bar::Bar.