[customization.point.object] # 16 Library introduction [[library]](./#library) ## 16.3 Method of description [[description]](description#customization.point.object) ### 16.3.3 Other conventions [[conventions]](conventions#customization.point.object) #### 16.3.3.3 Type descriptions [[type.descriptions]](type.descriptions#customization.point.object) #### 16.3.3.3.5 Customization Point Object types [customization.point.object] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L853) A [*customization point object*](#def:customization_point_object) is a function object ([[function.objects]](function.objects "22.10 Function objects")) with a literal class type that interacts with program-defined types while enforcing semantic requirements on that interaction[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L858) The type of a customization point object, ignoring cv-qualifiers, shall model[semiregular](concepts.object#concept:semiregular "18.6 Object concepts [concepts.object]") ([[concepts.object]](concepts.object "18.6 Object concepts"))[.](#2.sentence-1) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L862) All instances of a specific customization point object type shall be equal ([[concepts.equality]](concepts.equality "18.2 Equality preservation"))[.](#3.sentence-1) The effects of invoking different instances of a specific customization point object type on the same arguments are equivalent[.](#3.sentence-2) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L869) The type T of a customization point object, ignoring [*cv-qualifier*](dcl.decl.general#nt:cv-qualifier "9.3.1 General [dcl.decl.general]")*s*, shall model[invocable](concept.invocable#concept:invocable "18.7.2 Concept invocable [concept.invocable]"),[invocable](concept.invocable#concept:invocable "18.7.2 Concept invocable [concept.invocable]"),[invocable](concept.invocable#concept:invocable "18.7.2 Concept invocable [concept.invocable]"), and[invocable](concept.invocable#concept:invocable "18.7.2 Concept invocable [concept.invocable]") ([[concept.invocable]](concept.invocable "18.7.2 Concept invocable")) when the types in Args... meet the requirements specified in that customization point object's definition[.](#4.sentence-1) When the types of Args... do not meet the customization point object's requirements, T shall not have a function call operator that participates in overload resolution[.](#4.sentence-2) [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L881) For a given customization point object o, let p be a variable initialized as if by auto p = o;[.](#5.sentence-1) Then for any sequence of arguments args..., the following expressions have effects equivalent to o(args...): - [(5.1)](#5.1) p(args...) - [(5.2)](#5.2) as_const(p)(args...) - [(5.3)](#5.3) std​::​move(p)(args...) - [(5.4)](#5.4) std​::​move(as_const(p))(args...)