private typedef виден в производном классе


У меня небольшая проблема с компилятором (VC++ 6.0). На мой взгляд, такой код должен вызывать ошибку;

class Base
{
    private:
        typedef int T;
};

class Derived : private Base // Here the Base class can be inherited publicly as well. It does not play any role
{
    public:
        T z;
};



int main()
{
    Derived obj;
    obj.z = 7;
    return 0;
}

Этот фрагмент кода компилируется и запускается под VC++ 6.0 без каких-либо проблем.

Что касается SW-дизайна, этот код не идеален. Ни один из членов класса не должен быть объявлен открытым. Но меня этот аспект не интересует.

Моя проблема с typedef. Typedef объявляется в базовом классе как private. С моей точки зрения понимания C++, этот typedef не должен быть виден ни производному классу, ни функции main (). Но оба прекрасно их видят.

Есть ли у кого-нибудь объяснение этому феномену?

Заранее спасибо

Necip

1 2

1 ответ:

Это поведение является несоответствием в VC++6.0, вы должны были получить ошибку при определении Derived:: z. (за исключением, если у вас есть деловые причины использовать его, есть другие варианты технически предпочтительнее VC++6.0, который является старым).