I found myself in a situation where I know what type something is. The Type is one of three (or more) levels of inheritance. I call factory which returns B* how
B*
A cross cast doesn't need a dynamic_cast at all..
struct Base1 { virtual void f1(); }; struct Base2 { virtual void f2(); }; struct Derived : Base1, Base2 {}; Base1* b1 = new Derived(); // To cast it to a base2 *, cast it first to a derived * Derived *d = static_cast(b1); Base2 *b2 = static_cast(d);