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

NAME
     std::terminate - std::terminate

Synopsis
	Defined in header <exception>
	void terminate();			 (until C++11)
	[[noreturn]] void terminate() noexcept;  (since C++11)

	std::terminate()  is  called  by the C++ runtime when the program cannot
     continue for
	any of the following reasons:

	1) An exception is thrown and not caught (it  is  implementation-defined
     whether any
	stack unwinding is done in this case).
	2) A function directly invoked by the exception handling mechanism while
     handling an
	exception  that  has  not yet been caught exits via an exception (e.g. a
     destructor of
	some local object, or a copy constructor constructing a catch-clause pa-
     rameter).
	3) The constructor or the destructor of a static
	or thread-local
	(since C++11) object throws an exception.
	4) A function registered with std::atexit
	or std::at_quick_exit
	(since C++11) throws an exception.

	5) A dynamic exception specification is violated and the default
	handler for std::unexpected is executed.
	6) A non-default handler for std::unexpected throws  an  exception  that
     (until C++17)
	violates the previously violated dynamic exception specification, if
	the specification does not include std::bad_exception.

	7) A noexcept specification is violated (it is implementation-defined
	whether any stack unwinding is done in this case).
	8) std::nested_exception::rethrow_nested is called for an object that
	isn't holding a captured exception.
	9)  An	exception  is  thrown  from the initial function of std::thread.
     (since C++11)
	10) A joinable std::thread is destroyed or assigned to.
	11) std::condition_variable::wait,
	std::condition_variable::wait_until, or
	std::condition_variable::wait_for fails to reach its postcondition
	(e.g. if relocking the mutex throws).

	12) A function invoked by a parallel algorithm	exits  via  an	uncaught
     (since C++17)
	exception and the execution policy specifies termination.

	std::terminate() may also be called directly from the program.

	When  std::terminate  is  called  due to a thrown exception, an implicit
     try/catch
	handler is considered active. Thus, calling std::current_exception  will
     return the
	thrown exception.

	In  any  case,	std::terminate calls the currently installed std::termi-
     nate_handler.
	The default std::terminate_handler calls std::abort.

	If a destructor reset the terminate handler during stack unwinding and
	the unwinding later led to terminate being called, the handler that
	was installed at the end of the throw expression is the  one  that  will
     (until C++11)
	be called. (note: it was ambiguous whether re-throwing applied the new
	handlers)
	If a destructor reset the terminate handler during stack unwinding, it
	is  unspecified  which	handler  is called if the unwinding later led to
     (since C++11)
	terminate being called.

Notes
	If the handler mechanism is not wanted, e.g. because it requires  atomic
     operations
	which  may  bloat  binary size, a direct call to std::abort is preferred
     when
	terminating the program abnormally.

	Some compiler intrinsics, e.g. __builtin_trap (gcc, clang, and	icc)  or
     __debugbreak
	(msvc), can be used to terminate the program as fast as possible.

	Defect reports

	The  following	behavior-changing  defect  reports were applied retroac-
     tively to
	previously published C++ standards.

	   DR	 Applied to		 Behavior as published		    Cor-
     rect behavior
			    effect of calling std::set_terminate during
	LWG 2111 C++11	    stack					    made
     unspecified
			    unwinding differs from C++98 and breaks some
			    ABIs

See also
	terminate_handler the type of the function called by std::terminate
			  (typedef)
	abort		  causes abnormal program termination (without	cleaning
     up)
			  (function)

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

home | help