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

NAME
     std::bad_exception - std::bad_exception

Synopsis
	Defined in header <exception>
	class bad_exception;

	std::bad_exception  is	the type of the exception thrown by the C++ run-
     time in the
	following situations:

	  * If std::exception_ptr stores a copy of the caught exception and if
	    the  copy  constructor   of   the	exception   object   caught   by
     (since C++11)
	    std::current_exception throws an exception, the captured exception
	    is an instance of std::bad_exception.
	  * If a dynamic exception specification is violated and
	    std::unexpected throws or rethrows an exception that still
	    violates	the   exception   specification,   but	 the   exception
     (until C++17)
	    specification allows std::bad_exception, std::bad_exception is
	    thrown.

	std-bad exception-inheritance.svg

					Inheritance diagram

Member functions
	constructor   constructs the bad_exception object
		      (public member function)
	operator=     copies the object
		      (public member function)
	what	      returns the explanatory string
	[virtual]     (virtual public member function)

     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
	Compiles only in C++14 (or earlier) mode.

     // Run this code

      #include <exception>
      #include <iostream>
      #include <stdexcept>

      void my_unexp()
      {
	  throw;
      }

      void test()
	  throw(std::bad_exception) // Dynamic exception specifications
				    // are deprecated in C++11
      {
	  throw std::runtime_error("test");
      }

      int main()
      {
	  std::set_unexpected(my_unexp); //  Deprecated  in  C++11,  removed  in
     C++17

	  try
	  {
	      test();
	  }
	  catch (const std::bad_exception& e)
	  {
	      std::cerr << "Caught " << e.what() << '\n';
	  }
      }

Possible output:
      Caught std::bad_exception

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

home | help