Hi, guys, I test the following testcase with GCC 4.6 struct A { private: struct Patch {}; }; #ifdef TMPL template <int x> #endif struct X : private A { void f () { typedef A::Patch Patch; } }; int main() { #ifdef TMPL X<1> d; #else X d; #endif d.f(); } If TMPL is not defined, get the error message: /data/a.cpp: In member function 'void X::f()': /data/a.cpp:3:11: error: 'struct A::Patch' is private /data/a.cpp:12:24: error: within this context which makes sense, as struct Patch is the private member of struct A. But if TMPL is defined, GCC compiles it clean. This confuses me.