Herencia por dominio: ¿es realmente malo?
Soy una de esas personas que tiene que obtener su código para compilar con 0 advertencias. Normalmente respeto al compilador y si me da una advertencia, lo tomo como una señal de que debo retocar un poco mi código. Si tengo que decirle a un compilador que ignore una advertencia dada, tiemblo un poco.
Pero parece que no puedo evitar esto, y por lo que puedo decir, no he hecho nada "malo". ¿Alguien piensa que este es un diseño pobre? No puedo ver nada particularmente desagradable al respecto (excepto el "diamante malvado") pero es un código perfectamente válido y útil. ¡Pero genera (en MSVC) una advertencia de nivel 2!
class IFoo
{
public:
virtual void foo() = 0;
};
class Bar : public virtual IFoo
{
public:
virtual void foo() { std::cout << "Hello, world!"; }
};
class Baz : public virtual IFoo
{
};
class Quux : public Bar, public Baz
{
};
Ahora si creo un objeto Quux, se debe esperar que llame a la implementación Bar :: foo. MSVC es muy útil: ¿me advierte por no ser lo suficientemente ambiguo?
warning C4250: 'Quux': hereda 'Bar :: Bar :: foo' a través del dominio
Ahora reconozco que puedo desactivar esta advertencia con un pragma, pero esa no es la pregunta que estoy tratando de hacer aquí. ¿Hay alguna razón por la que debería estar escuchando el compilador aquí, o es solo una advertencia extremadamente entusiasta?