Herança por domínio - é realmente ruim?
Eu sou uma daquelas pessoas que precisam compilar seu código com 0 avisos. Normalmente, eu respeito o compilador e, se ele me emitir um aviso, tomo isso como um sinal de que devo retocar meu código um pouco. Se precisar instruir um compilador a ignorar um determinado aviso, eu me contorço um pouc
Mas este não parece me dar bem, e pelo que posso dizer, não fiz nada de "ruim". Alguém acha que esse é um design ruim? Não vejo nada de particularmente desagradável (exceto o "diamante do mal"), mas é um código perfeitamente válido e útil. Mas gera (no MSVC) um aviso de nível 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
{
};
Agora, se eu criar um objeto Quux, é de se esperar que chame a implementação Bar :: foo. O MSVC é muito útil: me adverte por não ser suficientemente ambíguo?
warning C4250: 'Quux': herda 'Bar :: Bar :: foo' via domínio
Agora reconheço que posso desativar esse aviso com um pragma, mas essa não é a pergunta que estou tentando fazer aqui. Existe algum motivo para eu ouvir o compilador aqui ou este é apenas um aviso extremamente zeloso?