C++ named requirements: CustomizationPointObject (since C++20)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Объекты точек настройки
являются бессостоятельными
функциональными объектами
типа
литерального
semiregular
класса.
Все объекты точек настройки одного и того же типа класса равны. Эффекты вызова различных экземпляров этого типа с одинаковыми аргументами эквивалентны, независимо от того, является ли выражение, обозначающее экземпляр, lvalue или rvalue, const-квалифицированным или нет. Однако volatile-квалифицированный экземпляр не обязан быть вызываемым. Таким образом, объекты точек настройки могут свободно копироваться, а копии могут использоваться взаимозаменяемо.
Пусть
Fn
будет типом объекта точки кастомизации, и
Args...
будет набором типов. Если
std::
declval
<
Args
>
(
)
...
удовлетворяет требованиям к аргументам для
Fn
,
Fn
моделирует
- std:: invocable < Fn, Args... > ,
- std:: invocable < const Fn, Args... > ,
- std:: invocable < Fn & , Args... > , и
-
std::
invocable
<
const
Fn
&
, Args...
>
.
В противном случае ни один оператор вызова функции
Fn
не участвует в разрешении перегрузки.