I\'m one of those people that has to get their code to compile with 0 warnings. Normally I respect the compiler and if it issues me a warning I take it as a sign that I should t
When performing virtual inheritance, it is a bad idea to not explicitly override every member in the most derived class. Else, you are asking for your code to die a horrible death when someone changes one of your base classes that inherits from the virtual base. There's nothing actively wrong with this, your program won't crash or anysuch, but it's a maintainability bad idea. If you want to call the Bar::foo
version, then you should just delegate to it in Quux::foo
.
As far as the runability of your code is concerned, it is just there to remind you that Bar is the dominant implementation of foo
. It is just there to inform you, it's not really a warning, so that if you're debugging and think it's Baz
you don't pull your hair out :).
Is there a reason you aren't writing:
class Quux : public Bar, public Baz
{
using Bar::foo;
};
?
This gives you the same level of reuse, without the fragility.