c++visual-studio-2003class-hierarchytoken-name-resolution

Wrong name resolution when parent and inner class have the same name


I have an odd case with Visual Studio 2003. For somewhat legitimate reasons, I have the following hierarchy:

class A {};

class B : public A {
public:
    class A {};
};

class C : public B::A {};

That is, I have an inner class with the same name as a parent of the outer class. When C tries to inherit from B::A, Visual Studio thinks I'm pointing to the parent class A, not the nested class within B. GCC seems to resolve to the inner class version as I expected

Is this a Visual Studio 2003 bug, or am I doing it wrong? Is there a workaround (other than upgrading Visual Studio)?


Solution

  • Yes, this looks like VS2003 bug. Workaround is simple - use typedef, it works this way:

    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;
    }