доступ к защищенному члену базового класса в другом подклассе

Почему это компилируется:

class FooBase
{
protected:
    void fooBase(void);
};

class Foo : public FooBase
{
public:
    void foo(Foo& fooBar)
    {
        fooBar.fooBase();
    }
};

а это не так?

class FooBase
{
protected:
    void fooBase(void);
};

class Foo : public FooBase
{
public:
    void foo(FooBase& fooBar)
    {
        fooBar.fooBase();
    }
};

С одной стороны, C ++ предоставляет доступ к закрытым / защищенным членам для всех экземпляров этого класса, но с другой стороны, он не предоставляет доступ к защищенным членам базового класса для всех экземпляров подкласса. Это выглядит довольно противоречиво для меня.

Я протестировал компиляцию с VC ++ и ideone.com, и оба компилировали первый, но не второй фрагмент кода.

Ответы на вопрос(7)

Ваш ответ на вопрос