Files
2025-10-25 03:02:53 +03:00

76 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[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.10Function 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.6Object concepts[concepts.object]") ([[concepts.object]](concepts.object "18.6Object 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.2Equality 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.1General[dcl.decl.general]")*s*, shall model[invocable](concept.invocable#concept:invocable "18.7.2Concept invocable[concept.invocable]")<T&, Args...>,[invocable](concept.invocable#concept:invocable "18.7.2Concept invocable[concept.invocable]")<const T&, Args...>,[invocable](concept.invocable#concept:invocable "18.7.2Concept invocable[concept.invocable]")<T, Args...>, and[invocable](concept.invocable#concept:invocable "18.7.2Concept invocable[concept.invocable]")<const T, Args...> ([[concept.invocable]](concept.invocable "18.7.2Concept 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...)