I seem to have a decent understanding of c++ castings. How static_cast/dynamic_cast work. One concept which I am finding little hard to digest is that:
What is the technical reason for C++ not to allow the down casting using static_cast if derived class is virtually inherited. Say for example :
class B {
}
class D : public B {
}
int main() {
B* b = new B;
D* d = new D;
b = static_cast<B*> d; // Valid
d = static_cast<D*> b; // Valid
b = d; // Valid. Implicit casting.
}
But when class 'D' is virtually inherited,
class D : virtual public B {
}
then below line breaks,
d = static_cast<D*> b; // Invalid
Although I have read couple of related posts to it but nothing seems to be the clear answer.