Multiple Erbschaft macht ein privates Mitglied zugänglich
-
21-12-2019 - |
Frage
Das ist kompiliert, obwohl B privat A. Wenn ich das Erbe von d-Erbe von C entfernt habe, sagt der Compiler, dass ein nicht erreichbar ist, als würde ich erwarten.Also ist das Erbschaft von C, das mein Compiler verwirrt?
Compiler ist GCC 4.4.7
Lösung
sieht aus wie ein echter Compiler-Fehler, da der Standard keinen solchen Zugriff auf
zulässt11.2 Zugänglichkeit von Basisklassen und Sockelklassenmitgliedern
Auf der Suche nach Beweisen außerhalb des Standards selbst, Whozcraig hat bereits erzeugt, dass CLANG einen solchen Zugang nicht zulässt.
Auf der Suche nach ähnlichen Mustern, die in GCC verwechselt werden könnten, gibt es Diamon-Vererbung mit virtueller Basisklasse A, der einen solchen Zugriff erlaubt hätte, da der Weg der meisten Zugriffe bestimmt, welchen Schutz anwendet.