If you have a complex inheritance hierarchy, the default behavior may not work by default. Consider, for example:
struct A {};
struct B : A {};
struct C : A {};
struct D : B, C {};
In this hierarchy, a type object Dhas two different type bases A. Converting from D*to is A*ambiguous. For this type of case, you can force it to go through an intermediate step.
A *p = static_cast<B*>(d);
Similarly, if there is a function with several overloads that can accept either a base or a derived type, and you need to call a version using the base type (note: this smells like code!), Then you can use translation to directly allow overloading. Again, if you need to redirect overload resolution, you are probably doing something else wrong.
(.. ), , , , .