The handler functions new_handler
, terminate_handler
, and unexpected_handler
can be globally replaced by custom implementations, as specified by [handler.functions], paragraph 2, of the C++ Standard [ISO/IEC 14882-2014]. For instance, an application could set a custom termination handler by calling std::set_terminate()
, and the custom termination handler may log the termination for later auditing. However, the C++ Standard, [res.on.functions], paragraph 1, states the following:
In certain cases (replacement functions, handler functions, operations on types used to instantiate standard library template components), the C++ standard library depends on components supplied by a C++ program. If these components do not meet their requirements, the Standard places no requirements on the implementation.
Paragraph 2 further states, in part, further states the following:
In particular, the effects are undefined in the following cases:
— for handler functions, if the installed handler function does not implement the semantics of the applicable Required behavior: paragraph
...
The requirements for a replacement unexpected_handler
are specified by [unexpected.handler], paragraph 2. unexpected_handler
is a deprecated feature of C++.
Required behavior: An
unexpected_handler
shall not return. See also 15.5.2.
unexpected_handler
is a deprecated feature of C++.
Noncompliant Code Example
...