[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)
