¿Por qué no se puede utilizar static_cast para hacer down-cast cuando se trata de una herencia virtual?

Considere el siguiente código:

struct Base {};
struct Derived : public virtual Base {};

void f()
{
    Base* b = new Derived;
    Derived* d = static_cast<Derived*>(b);
}

Esto está prohibido por el estándar [n3290: 5.2.9/2]) para que el código no se compile, porqueDerived virtualment hereda deBase. La eliminación de lavirtual de la herencia hace que el código sea válido.

¿Cuál es la razón técnica para que exista esta regla?

Respuestas a la pregunta(6)

Su respuesta a la pregunta