Это не помогает Это бросает предупреждение в любом случае. VC ++ 2013

н из тех людей, которым нужно компилировать свой код с 0 предупреждениями. Обычно я уважаю компилятор и, если он выдает мне предупреждение, я воспринимаю это как знак того, что мне следует немного подправить свой код. Если я должен сказать компилятору игнорировать данное предупреждение, я немного дергаюсь.

Но этот, который я не могу обойти, и из того, что я могу сказать, я не сделал ничего "плохого". Кто-нибудь считает, что это плохой дизайн? Я не вижу в этом ничего особенно неприятного (кроме «злого бриллианта»), но это совершенно правильный и полезный код. Но он генерирует (в MSVC) предупреждение уровня 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
{

};

Теперь, если я создаю объект Quux, следует ожидать, что он вызовет реализацию Bar :: foo. MSVC очень полезен: он предупреждает меня за то, что я недостаточно двусмысленен?

предупреждение C4250: «Quux»: наследует Bar :: Bar :: foo через доминирование

Теперь я понимаю, что могу отключить это предупреждение с помощью прагмы, но это не тот вопрос, который я пытаюсь здесь задать. Есть ли какая-то причина, по которой я должен слушать компилятор здесь, или это просто чрезмерно усердное предупреждение?

Ответы на вопрос(3)

Ваш ответ на вопрос