Lets say we have a class hierarchy. At the bottom we have Base and at the top Derived. How to determine object class even if it is converted to base class pointer.
make sure the base class has at least one virtual method, include and use your current code just with an additional dereferencing, typeid(*b).name().
typeid call is the one place in C++ where you can dereference a nullpointer with well-defined behavior, which implies that it can throw an exception:
C++11 §5.2.8/2:
“If the glvalue expression is obtained by applying the unary*operator to a pointer and the pointer is a null pointer value (4.10), thetypeidexpression throws thestd::bad_typeidexception (18.7.3).”