The dynamic_cast operator throws a bad_cast exception as the result of a failed cast to a reference type. The interface for bad_cast is:
class bad_cast : public logic {
public:
bad_cast(const __exString& what_arg) : logic(what_arg) {}
void raise() { handle_raise(); throw *this; }
// virtual __exString what() const; //inherited
};