When there is no parameter for a given argument, the argument is passed
in such a way that the receiving function can obtain the value of the
argument by invoking
va_arg. [
Note 11:
This paragraph does not apply to arguments passed to a function parameter pack
. Function parameter packs are expanded during template instantiation (
[temp.variadic]),
thus each such argument has a corresponding parameter when a function template
specialization is actually called
. —
end note]
An argument that has type
cv std::nullptr_t is converted
to type
void* (
[conv.ptr])
. After these conversions, if the
argument does not have arithmetic, enumeration, pointer, pointer-to-member,
or class type, the program is ill-formed
. Passing a potentially-evaluated
argument
of a scoped enumeration type or
of a class type (
[class]) having an eligible non-trivial
copy constructor, an eligible non-trivial move constructor,
or a
non-trivial destructor (
[special]),
with no corresponding parameter, is conditionally-supported with
implementation-defined semantics
. If the argument has
integral or enumeration type that is subject to the
integral
promotions, or a floating-point type that is subject to the
floating-point promotion, the value of the argument is converted to the
promoted type before the call
.