Zugriff auf ein geschütztes Mitglied einer Basisklasse in einer anderen Unterklasse

Warum kompiliert das:

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

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

aber das geht nicht?

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

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

Einerseits gewährt C ++ den Zugriff auf private / geschützte Member für alle Instanzen dieser Klasse, andererseits gewährt es den Zugriff auf geschützte Member einer Basisklasse nicht für alle Instanzen einer Unterklasse. Das sieht für mich eher inkonsistent aus.

Ich habe das Kompilieren mit VC ++ und mit ideone.com getestet und beide kompilieren das erste, aber nicht das zweite Code-Snippet.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage