If a program declares or defines a name in a context where it is
reserved, other than as explicitly allowed by Clause [library], its behavior is
undefined.
The names shown in Table 39 are reserved as members for
previous standardization, and may not be used as a name for object-like macros
in portable code:
The names shown in Table 40 are reserved as member functions
for previous standardization, and may not be used as a name for function-like
macros in portable code:
Each name declared as an object with external linkage
in a header is reserved to the implementation to designate that library
object with external linkage,¹⁴¹
both in namespace std and in the global namespace.
Each
global function signature declared with
external linkage in a header is reserved to the
implementation to designate that function signature with
external linkage.¹⁴²
Each name from the C standard library declared with external linkage
is reserved to the implementation for use as a name with
extern"C"
linkage,
both in namespace std and in the global namespace.
Each function signature from the C standard library declared with
external linkage
is reserved to the implementation for use as
a function signature with both
extern"C"
and
extern"C++"
linkage,¹⁴³
or as a name of namespace scope in the global namespace.
The list of such reserved function
signatures with external linkage includes
setjmp(jmp_buf),
declared or defined in <csetjmp>,
and
va_end(va_list),
declared or defined in
<cstdarg>.
The function signatures declared in
<cuchar>,
<cwchar>,
and
<cwctype>
are always reserved, notwithstanding the restrictions imposed in subclause
4.5.1 of Amendment 1 to the C Standard for these headers.
For each type T from the C standard library,
the types
::T
and
std::T
are reserved to the implementation and, when declared,
::T
shall be identical to
std::T.