https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105752
Bug ID: 105752 Summary: Template function can access private member Product: gcc Version: 12.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: csaba_22 at yahoo dot co.uk Target Milestone: --- The following code class Outer { private: // !!!!! struct Inner {}; }; template<typename T> struct Meow { void purr() { Outer::Inner oi; } }; int main() { Meow<double> kitty; //kitty.purr(); } is compiled by GCC from 4.1.2 to 12.1.0, but is rejected by all clang releases available on godbolt. https://godbolt.org/z/58Yca6dah Also mentioned here: https://stackoverflow.com/questions/28596242/accessing-private-inner-class-type-from-non-member-template-function If the call to the function is uncommented, then GCC also emits an error. Visual Studio 2013 update 4 also emits an error (allegedly), so this sounds like a bug.