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 (
[dcl.enum]) or
of a class type (
[class]) having
an eligible non-trivial copy constructor (
[special],
[class.copy.ctor]),
an eligible non-trivial move constructor, or
a non-trivial destructor (
[class.dtor]),
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
.