I understand that virtual base class mechanism exists to prevent the "Diamond" problem. But I am curious if the situation is not better handled by re-designing the class hierarchy. 
Take the case below: [copied from here](https://stackoverflow.com/questions/21558/in-c-what-is-a-virtual-base-class)

```
class A { public: void Foo() {} };
class B : public virtual A {};
class C : public virtual A {};
class D : public B, public C {};

```

The problem I see with the mechanism as it exists now, is you need to be able to predict that someone is going to come along and inherit from both B and C. So does not mean we are better off tagging every inheritance with virtual?