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?

questionAnswers(3)

yourAnswerToTheQuestion