¿Por qué se debe especificar la herencia virtual en medio de una jerarquía de diamantes?

Tengo jerarquía de clases de diamantes:

    A
  /   \
 B     C
  \   /
    D

ara evitar dos copias de A en D, necesitamos usar herencia virtual en B y C.

class A                     {  }; 
class B: virtual public A {};
class C: virtual public A   { }; 
class D: public B, public C { }; 

Pregunta: ¿Por qué la herencia virtual debe realizarse en B y C, aunque la ambigüedad esté en D? Hubiera sido más intuitivo si estuviera en D.

¿Por qué esta función está diseñada así por el comité de normas? ¿Qué podemos hacer si las clases B y C provienen de una biblioteca de terceros?

EDIT: Mi respuesta fue indicar a las clases B y C que no deberían invocar al constructor de A cada vez que se crea su objeto derivado, ya que será invocado por D.

Respuestas a la pregunta(5)

Su respuesta a la pregunta