struct B1{
int d;
void fb(){};
};
struct B2 : B1{
using B1::d;
using B1::fb;
int d; // why this gives error?
void fb(){} // and this does not?
};
int main(){}
¿Es porque, B1::fb()
se trata como B1::fb(B1*)
and B2::fb()
tratados como B2::fb(B2*)
? Es decir, ¿el parámetro implícito ayuda a distinguirlos?declaración (clase derivada)
estándar$ 13.3.1/4-
Para funciones no se convierta introducidas por a-declaración usando en un clase derivada, la función se considera ser un miembro de la clase derivada para el propósito de definiendo el tipo de el parámetro de objeto implícito.
e int d entra en conflicto con la declaración previa de la que usa ... – diverscuba23
¿cuál es la implicación real de $ 13.3.1/4 en ese caso? – Chubsdad
@chubsdad: Dado que 'B2 :: fb()' oculta 'B1 :: fb()', 'B1 :: fb()' no se considera una función candidata durante la resolución de sobrecarga, por lo que §13.3.1/4 lo hace no aplicar. –