Init
This commit is contained in:
75
cppdraft/customization/point/object.md
Normal file
75
cppdraft/customization/point/object.md
Normal file
@@ -0,0 +1,75 @@
|
||||
[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]")<T&, Args...>,[invocable](concept.invocable#concept:invocable "18.7.2 Concept invocable [concept.invocable]")<const T&, Args...>,[invocable](concept.invocable#concept:invocable "18.7.2 Concept invocable [concept.invocable]")<T, Args...>, and[invocable](concept.invocable#concept:invocable "18.7.2 Concept invocable [concept.invocable]")<const T, Args...> ([[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...)
|
||||
Reference in New Issue
Block a user