63 lines
1.8 KiB
Markdown
63 lines
1.8 KiB
Markdown
[handler.functions]
|
||
|
||
# 16 Library introduction [[library]](./#library)
|
||
|
||
## 16.4 Library-wide requirements [[requirements]](requirements#handler.functions)
|
||
|
||
### 16.4.5 Constraints on programs [[constraints]](constraints#handler.functions)
|
||
|
||
#### 16.4.5.7 Handler functions [handler.functions]
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3415)
|
||
|
||
The C++ standard library provides a default version of the following handler
|
||
function ([[support]](support "17 Language support library")):
|
||
|
||
- [(1.1)](#1.1)
|
||
|
||
terminate_handler
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3424)
|
||
|
||
A C++ program may install different handler functions during execution, by
|
||
supplying a pointer to a function defined in the program or the library
|
||
as an argument to (respectively):
|
||
|
||
- [(2.1)](#2.1)
|
||
|
||
set_new_handler
|
||
|
||
- [(2.2)](#2.2)
|
||
|
||
set_terminate
|
||
|
||
See also subclauses [[alloc.errors]](alloc.errors "17.6.4 Storage allocation errors"), Storage allocation errors, and [[support.exception]](support.exception "17.9 Exception handling"),
|
||
Exception handling[.](#2.sentence-1)
|
||
|
||
[3](#3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3435)
|
||
|
||
A C++ program can get a pointer to the current handler function by calling the following
|
||
functions:
|
||
|
||
- [(3.1)](#3.1)
|
||
|
||
get_new_handler
|
||
|
||
- [(3.2)](#3.2)
|
||
|
||
get_terminate
|
||
|
||
[4](#4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3447)
|
||
|
||
Calling the set_* and get_* functions shall not incur a data race ([[intro.races]](intro.races "6.10.2.2 Data races"))[.](#4.sentence-1)
|
||
|
||
A call to any of the set_* functions synchronizes with subsequent calls to the sameset_* function and to the corresponding get_* function[.](#4.sentence-2)
|