A customization point object is a function object ([function.objects])
with a literal class type that interacts with program-defined types while
enforcing semantic requirements on that interaction.
The type T of a customization point object,
ignoring cv-qualifiers, shall model
invocable<T&, Args...>,
invocable<const T&, Args...>,
invocable<T, Args...>, and
invocable<const T, Args...> ([concept.invocable])
when the types in Args... meet the requirements specified in that
customization point object's definition.
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.