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