Pregunta

class A {
    public:
            int a;
};

class B: private A {
};

class C: public A {
};

class D: public B, public C {
        D() {
                B::a = 0;
        }
};

Esto compila a pesar de que B hereda en privado A. Si elimino la herencia de C, el compilador dice que es inaccesible, como lo esperaría.Entonces, ¿la herencia de C confuso mi compilador?

El compilador es GCC 4.4.7

¿Fue útil?

Solución

parece un error de compilador genuino, ya que el estándar no permite ese acceso en

11.2 Accesibilidad de las clases básicas y los miembros de la clase base

Buscando evidencia fuera de la propia estándar, Whozcraig ya mencionó que el clang no permite ese acceso.

Buscando patrones similares que puedan confundirse en GCC, hay una herencia de Diamon con la Clase A de la Base Virtual A, que habría permitido tal acceso, ya que la ruta de la mayoría del acceso determina qué protecciones se aplican.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top