 <p>Yes, this looks like VS2003 bug. Workaround is simple - use typedef, it works this way:</p> <pre><code>class A { public: int x; }; class B : public A { public: class A { public: int y; }; }; typedef B::A BA; class C: public BA {}; void f() { C cc; cc.y = 0; } </code></pre>