How to identify failed casts using dynamic_cast operator?

c++, dynamic-cast, pointers, reference

Solution

For pointers, it's a simple null check:

A* a = new A();
B* b = dynamic_cast<B*>(a);

if (b == nullptr)
{
    // Cast failed
}

For references, you can catch:

try {
    SomeType &item = dynamic_cast<SomeType&>(obj);
}
catch(const std::bad_cast& e) {
    // Cast failed
}

Problem

`Scott Meyer` in his book `Effective C++` says `dynamic_cast` is used to perform safe casts down or across an inheritance hierarchy. That is, you use dynamic_cast to cast pointers or references to base class objects into pointers or references to derived or sibling base class objects in such a way that you can determine whether the casts succeeded. Failed casts are indicated by a null pointer (when casting pointers) or an exception (when casting references). I would like to get two code snippet showing the failed cast in the case of casting pointer and casting reference can be indicated.

Original source