[reserved.names]
# 16 Library introduction [[library]](./#library)
## 16.4 Library-wide requirements [[requirements]](requirements#reserved.names)
### 16.4.5 Constraints on programs [[constraints]](constraints#reserved.names)
#### 16.4.5.3 Reserved names [reserved.names]
#### [16.4.5.3.1](#general) General [[reserved.names.general]](reserved.names.general)
[1](#general-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3133)
The C++ standard library reserves the following kinds of names:
- [(1.1)](#general-1.1)
macros
- [(1.2)](#general-1.2)
global names
- [(1.3)](#general-1.3)
names with external linkage
[2](#general-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3141)
If a program declares or defines a name in a context where it is
reserved, other than as explicitly allowed by [[library]](library "16 Library introduction"), its behavior is
undefined[.](#general-2.sentence-1)
#### [16.4.5.3.2](#zombie.names) Zombie names [[zombie.names]](zombie.names)
[1](#zombie.names-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3152)
In namespace std, the names shown in Table [38](#tab:zombie.names.std "Table 38: Zombie names in namespace std") are
reserved for previous standardization:
Table [38](#tab:zombie.names.std) — Zombie names in namespace std [[tab:zombie.names.std]](./tab:zombie.names.std)
| [ð](#tab:zombie.names.std-row-1)
auto_ptr | generate_header | pointer_to_binary_function |
| --- | --- | --- |
| [ð](#tab:zombie.names.std-row-2)
auto_ptr_ref | get_pointer_safety | pointer_to_unary_function |
| [ð](#tab:zombie.names.std-row-3)
binary_function | get_temporary_buffer | ptr_fun |
| [ð](#tab:zombie.names.std-row-4)
binary_negate | get_unexpected | random_shuffle |
| [ð](#tab:zombie.names.std-row-5)
bind1st | gets | raw_storage_iterator |
| [ð](#tab:zombie.names.std-row-6)
bind2nd | is_literal_type | result_of |
| [ð](#tab:zombie.names.std-row-7)
binder1st | is_literal_type_v | result_of_t |
| [ð](#tab:zombie.names.std-row-8)
binder2nd | istrstream | return_temporary_buffer |
| [ð](#tab:zombie.names.std-row-9)
codecvt_mode | little_endian | set_unexpected |
| [ð](#tab:zombie.names.std-row-10)
codecvt_utf16 | mem_fun1_ref_t | strstream |
| [ð](#tab:zombie.names.std-row-11)
codecvt_utf8 | mem_fun1_t | strstreambuf |
| [ð](#tab:zombie.names.std-row-12)
codecvt_utf8_utf16 | mem_fun_ref_t | unary_function |
| [ð](#tab:zombie.names.std-row-13)
const_mem_fun1_ref_t | mem_fun_ref | unary_negate |
| [ð](#tab:zombie.names.std-row-14)
const_mem_fun1_t | mem_fun_t | uncaught_exception |
| [ð](#tab:zombie.names.std-row-15)
const_mem_fun_ref_t | mem_fun | undeclare_no_pointers |
| [ð](#tab:zombie.names.std-row-16)
const_mem_fun_t | not1 | undeclare_reachable |
| [ð](#tab:zombie.names.std-row-17)
consume_header | not2 | unexpected_handler |
| [ð](#tab:zombie.names.std-row-18)
declare_no_pointers | ostrstream | wbuffer_convert |
| [ð](#tab:zombie.names.std-row-19)
declare_reachable | pointer_safety | wstring_convert |
[2](#zombie.names-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3220)
The names shown in Table [39](#tab:zombie.names.objmacro "Table 39: Zombie object-like macros") are reserved as members for
previous standardization, and may not be used as a name for object-like macros
in portable code:
Table [39](#tab:zombie.names.objmacro) — Zombie object-like macros [[tab:zombie.names.objmacro]](./tab:zombie.names.objmacro)
| [ð](#tab:zombie.names.objmacro-row-1)
argument_type | op | second_argument_type |
| --- | --- | --- |
| [ð](#tab:zombie.names.objmacro-row-2)
first_argument_type | open_mode | seek_dir |
| [ð](#tab:zombie.names.objmacro-row-3)
io_state | preferred | strict |
[3](#zombie.names-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3241)
The names shown in Table [40](#tab:zombie.names.fnmacro "Table 40: Zombie function-like macros") are reserved as member functions
for previous standardization, and may not be used as a name for function-like
macros in portable code:
Table [40](#tab:zombie.names.fnmacro) — Zombie function-like macros [[tab:zombie.names.fnmacro]](./tab:zombie.names.fnmacro)
| [ð](#tab:zombie.names.fnmacro-row-1)
converted | freeze | from_bytes | pcount | stossc | to_bytes |
| --- | --- | --- | --- | --- | --- |
[4](#zombie.names-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3261)
The header names shown in Table [41](#tab:zombie.names.header "Table 41: Zombie headers") are reserved for previous
standardization:
Table [41](#tab:zombie.names.header) — Zombie headers [[tab:zombie.names.header]](./tab:zombie.names.header)
| [ð](#tab:zombie.names.header-row-1)
| | | | |
| --- | --- | --- | --- | --- |
| [ð](#tab:zombie.names.header-row-2)
| | | | |
#### [16.4.5.3.3](#macro.names) Macro names [[macro.names]](macro.names)
[1](#macro.names-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3282)
A translation unit that includes a standard library header shall not#define or #undef names declared in any standard
library header[.](#macro.names-1.sentence-1)
#### [16.4.5.3.4](#extern.names) External linkage [[extern.names]](extern.names)
[1](#extern.names-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3291)
Each name declared as an object with external linkagein a header is reserved to the implementation to designate that library
object with external linkage,[152](#footnote-152 "The list of such reserved names includes errno, declared or defined in .") both in namespace std and in the global namespace[.](#extern.names-1.sentence-1)
[2](#extern.names-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3303)
Eachglobal function signature declared withexternal linkage in a header is reserved to the
implementation to designate that function signature withexternal linkage[.](#extern.names-2.sentence-1)[153](#footnote-153 "The list of such reserved function signatures with external linkage includes setjmp(jmp_buf), declared or defined in , and va_end(va_list), declared or defined in .")
[3](#extern.names-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3326)
Each name from the C standard library declared with external linkageis reserved to the implementation for use as a name withextern "C" linkage,
both in namespace std and in the global namespace[.](#extern.names-3.sentence-1)
[4](#extern.names-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3336)
Each function signature from the C standard library declared withexternal linkage
is reserved to the implementation for use as
a function signature with bothextern "C" andextern "C++" linkage,[154](#footnote-154 "The function signatures declared in , , and are always reserved, notwithstanding the restrictions imposed in subclause 4.5.1 of Amendment 1 to the C Standard for these headers.") or as a name of namespace scope in the global namespace[.](#extern.names-4.sentence-1)
[152)](#footnote-152)[152)](#footnoteref-152)
The list of such reserved names includeserrno, declared or defined in [](errno.general#header:%3ccerrno%3e "19.4.1 General [errno.general]")[.](#footnote-152.sentence-1)
[153)](#footnote-153)[153)](#footnoteref-153)
The list of such reserved function
signatures with external linkage includessetjmp(jmp_buf),
declared or defined in [](csetjmp.syn#header:%3ccsetjmp%3e "17.14.3 Header synopsis [csetjmp.syn]"),
andva_end(va_list),
declared or defined in[](cstdarg.syn#header:%3ccstdarg%3e "17.14.2 Header synopsis [cstdarg.syn]")[.](#footnote-153.sentence-1)
[154)](#footnote-154)[154)](#footnoteref-154)
The function signatures declared in[](cuchar.syn#header:%3ccuchar%3e "28.7.4 Header synopsis [cuchar.syn]"),[](cwchar.syn#header:%3ccwchar%3e "28.7.3 Header synopsis [cwchar.syn]"),
and[](cwctype.syn#header:%3ccwctype%3e "28.7.2 Header synopsis [cwctype.syn]") are always reserved, notwithstanding the restrictions imposed in subclause
4.5.1 of Amendment 1 to the C Standard for these headers[.](#footnote-154.sentence-1)
#### [16.4.5.3.5](#extern.types) Types [[extern.types]](extern.types)
[1](#extern.types-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3362)
For each type T from the C standard library,
the types::T andstd::T are reserved to the implementation and, when defined,::T shall be identical tostd::T[.](#extern.types-1.sentence-1)
#### [16.4.5.3.6](#usrlit.suffix) User-defined literal suffixes [[usrlit.suffix]](usrlit.suffix)
[1](#usrlit.suffix-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3375)
Literal suffix identifiers ([[over.literal]](over.literal "12.6 User-defined literals")) that do not start with an underscore are reserved for future standardization[.](#usrlit.suffix-1.sentence-1)
Literal suffix identifiers that contain a double underscore__are reserved for use by C++ implementations[.](#usrlit.suffix-1.sentence-2)