[specialized.algorithms.general] # 26 Algorithms library [[algorithms]](./#algorithms) ## 26.11 Specialized algorithms [[specialized.algorithms]](specialized.algorithms#general) ### 26.11.1 General [specialized.algorithms.general] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/algorithms.tex#L13503) The contents specified in [[specialized.algorithms]](specialized.algorithms "26.11 Specialized algorithms") are declared in the header [](memory.syn#header:%3cmemory%3e "20.2.2 Header synopsis [memory.syn]")[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/algorithms.tex#L13507) Unless otherwise specified, if an exception is thrown in the following algorithms, objects constructed by a placement [*new-expression*](expr.new#nt:new-expression "7.6.2.8 New [expr.new]") ([[expr.new]](expr.new "7.6.2.8 New")) are destroyed in an unspecified order before allowing the exception to propagate[.](#2.sentence-1) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/algorithms.tex#L13514) [*Note [1](#note-1)*: When new objects are created by the algorithms specified in [[specialized.algorithms]](specialized.algorithms "26.11 Specialized algorithms"), the lifetime ends for any existing objects (including potentially-overlapping subobjects [[intro.object]](intro.object "6.8.2 Object model")) in storage that is reused [[basic.life]](basic.life "6.8.4 Lifetime")[.](#3.sentence-1) — *end note*] [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/algorithms.tex#L13523) Some algorithms specified in [[specialized.algorithms]](specialized.algorithms "26.11 Specialized algorithms") make use of the following exposition-only function templates:templateconstexpr void* *voidify*(T& obj) noexcept {return addressof(obj); }templatedecltype(auto) *deref-move*(I& it) {if constexpr (is_lvalue_reference_v)return std::move(*it); elsereturn *it; }