home | help
std::bad_cast(3)	       C++ Standard Libary		std::bad_cast(3)

NAME
     std::bad_cast - std::bad_cast

Synopsis
	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  inheri-
     tance), and also
	from std::use_facet if the requested facet does not exist in the locale.

	std-bad cast-inheritance.svg

					Inheritance diagram

Member functions
	constructor   constructs a new bad_cast object
		      (public member function)
	operator=     replaces the bad_cast object
		      (public member function)
	what	      returns the explanatory string
		      (public member function)

     std::bad_cast::bad_cast

	bad_cast() throw();				    (until C++11)
	bad_cast() noexcept;			    (1)     (since C++11)
	bad_cast( const bad_cast& other ) throw();	(2)		  (until
     C++11)
	bad_cast( const bad_cast& other ) noexcept;			  (since
     C++11)

	Constructs  a  new  bad_cast object with an implementation-defined null-
     terminated byte
	string which is accessible through what().

	1) Default constructor.
	2) Copy constructor.
	If *this and other both have dynamic type std::bad_cast  then  std::str-
     cmp(what(),
	other.what()) == 0.
	(since C++11)

Parameters
	other - another exception object to copy

     std::bad_cast::operator=

	bad_cast& operator=( const bad_cast& other ) throw();	(until C++11)
	bad_cast& operator=( const bad_cast& other ) noexcept;	(since C++11)

	Assigns the contents with those of other.
	If  *this  and other both have dynamic type std::bad_cast then std::str-
     cmp(what(),
	other.what()) == 0 after assignment.
	(since C++11)

Parameters
	other - another exception object to assign with

Return value
	*this

     std::bad_cast::what

	virtual const char* what() const throw();   (until C++11)
	virtual const char* what() const noexcept;  (since C++11)

	Returns the explanatory string.

Parameters
	(none)

Return value
	Pointer to a null-terminated string with  explanatory  information.  The
     string is
	suitable  for  conversion  and display as a std::wstring. The pointer is
     guaranteed to
	be valid at least until the exception object from which it  is	obtained
     is destroyed,
	or  until a non-const member function (e.g. copy assignment operator) on
     the
	exception object is called.

Notes
	Implementations are allowed but not required to override what().

     Inherited from std::exception

Member functions
	destructor   destroys the exception object
	[virtual]    (virtual public member function of std::exception)
	what	     returns an explanatory string
	[virtual]    (virtual public member function of std::exception)

Example
     // Run this code

      #include <iostream>
      #include <typeinfo>

      struct Foo { virtual ~Foo() {} };
      struct Bar { virtual ~Bar() { std::cout << "~Bar\n"; } };
      struct Pub : Bar { ~Pub() override { std::cout << "~Pub\n"; } };

      int main()
      {
	  Pub pub;
	  try
	  {
	      [[maybe_unused]]
	      Bar& r1 = dynamic_cast<Bar&>(pub); // OK, upcast

	      [[maybe_unused]]
	      Foo& r2 = dynamic_cast<Foo&>(pub); // throws
	  }
	  catch (const std::bad_cast& e)
	  {
	      std::cout << "e.what(): " << e.what() << '\n';
	  }
      }

Possible output:
      e.what(): std::bad_cast
      ~Pub
      ~Bar

http://cppreference.com 	   2024.06.10			std::bad_cast(3)

home | help