Por que o static_cast não pode ser usado para diminuir a conversão quando a herança virtual está envolvida?

Considere o seguinte código:

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

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

Isso é proibido pela norma [n3290: 5.2.9/2]) para que o código não seja compilado, porqueDerived virtualment herda deBase. Removendo ovirtual da herança torna o código válido.

Qual é o motivo técnico para esta regra existir?

questionAnswers(6)

yourAnswerToTheQuestion