Defined in header <typeinfo>
class bad_cast : public std::exception;

An exception of this type is thrown when a dynamic_cast to a reference type fails the run-time check (e.g. because the types are not related by inheritance), and also from std::use_facet if the requested facet does not exist in the locale.

cpp/error/exceptionstd-bad cast-inheritance.svg

Inheritance diagram.

Member functions

constructs a new bad_cast object
(public member function)

Inherited from std::exception

Member functions

destructs the exception object
(virtual public member function of std::exception)
returns an explanatory string
(virtual public member function of std::exception)


#include <iostream>
#include <typeinfo>
struct Foo { virtual ~Foo() {} };
struct Bar { virtual ~Bar() {} };
int main()
    Bar b;
    try {
        Foo& f = dynamic_cast<Foo&>(b);
    } catch(const std::bad_cast& e)
        std::cout << e.what() << '\n';

Possible output:

Bad dynamic cast

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.