21 Language support library [language.support]

21.10 Other runtime support [support.runtime]

21.10.1 Header <cstdarg> synopsis [cstdarg.syn]

namespace std {
  using va_­list = see below;
}

#define va_­arg(V, P) see below
#define va_­copy(VDST, VSRC) see below
#define va_­end(V) see below
#define va_­start(V, P) see below

The contents of the header <cstdarg> are the same as the C standard library header <stdarg.h>, with the following changes: The restrictions that ISO C places on the second parameter to the va_­start macro in header <stdarg.h> are different in this International Standard. The parameter parmN is the rightmost parameter in the variable parameter list of the function definition (the one just before the ...).219 If the parameter parmN is a pack expansion ([temp.variadic]) or an entity resulting from a lambda capture ([expr.prim.lambda]), the program is ill-formed, no diagnostic required. If the parameter parmN is of a reference type, or of a type that is not compatible with the type that results when passing an argument for which there is no parameter, the behavior is undefined.

See also: ISO C 7.16.1.1.

Note that va_­start is required to work as specified even if unary operator& is overloaded for the type of parmN.