dostęp do chronionego członka klasy bazowej w innej podklasie

Dlaczego to się kompiluje:

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

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

ale tak nie jest?

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

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

Z jednej strony C ++ zapewnia dostęp do prywatnych / chronionych elementów dla wszystkich instancji tej klasy, ale z drugiej strony nie przyznaje dostępu chronionym członkom klasy bazowej dla wszystkich instancji podklasy. Wydaje mi się to niespójne.

Przetestowałem kompilację z VC ++ iz ideone.com i kompiluję pierwszy, ale nie drugi fragment kodu.

questionAnswers(7)

yourAnswerToTheQuestion