9.8 KiB
[reserved.names]
16 Library introduction [library]
16.4 Library-wide requirements [requirements]
16.4.5 Constraints on programs [constraints]
16.4.5.3 Reserved names [reserved.names]
16.4.5.3.1 General [reserved.names.general]
The C++ standard library reserves the following kinds of names:
macros
global names
names with external linkage
If a program declares or defines a name in a context where it is reserved, other than as explicitly allowed by [library], its behavior is undefined.
16.4.5.3.2 Zombie names [zombie.names]
In namespace std, the names shown in Table 38 are reserved for previous standardization:
Table 38 — Zombie names in namespace std [tab:zombie.names.std]
| ð auto_ptr |
generate_header | pointer_to_binary_function |
|---|---|---|
| ð auto_ptr_ref |
get_pointer_safety | pointer_to_unary_function |
| ð binary_function |
get_temporary_buffer | ptr_fun |
| ð binary_negate |
get_unexpected | random_shuffle |
| ð bind1st |
gets | raw_storage_iterator |
| ð bind2nd |
is_literal_type | result_of |
| ð binder1st |
is_literal_type_v | result_of_t |
| ð binder2nd |
istrstream | return_temporary_buffer |
| ð codecvt_mode |
little_endian | set_unexpected |
| ð codecvt_utf16 |
mem_fun1_ref_t | strstream |
| ð codecvt_utf8 |
mem_fun1_t | strstreambuf |
| ð codecvt_utf8_utf16 |
mem_fun_ref_t | unary_function |
| ð const_mem_fun1_ref_t |
mem_fun_ref | unary_negate |
| ð const_mem_fun1_t |
mem_fun_t | uncaught_exception |
| ð const_mem_fun_ref_t |
mem_fun | undeclare_no_pointers |
| ð const_mem_fun_t |
not1 | undeclare_reachable |
| ð consume_header |
not2 | unexpected_handler |
| ð declare_no_pointers |
ostrstream | wbuffer_convert |
| ð declare_reachable |
pointer_safety | wstring_convert |
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:
Table 39 — Zombie object-like macros [tab:zombie.names.objmacro]
| ð argument_type |
op | second_argument_type |
|---|---|---|
| ð first_argument_type |
open_mode | seek_dir |
| ð io_state |
preferred | strict |
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:
Table 40 — Zombie function-like macros [tab:zombie.names.fnmacro]
| ð converted |
freeze | from_bytes | pcount | stossc | to_bytes |
|---|
The header names shown in Table 41 are reserved for previous standardization:
Table 41 — Zombie headers [tab:zombie.names.header]
| ð |
||||
|---|---|---|---|---|
| ð |
16.4.5.3.3 Macro names [macro.names]
A translation unit that includes a standard library header shall not#define or #undef names declared in any standard library header.
16.4.5.3.4 External linkage [extern.names]
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 both in namespace std and in the global namespace.
Eachglobal function signature declared withexternal linkage in a header is reserved to the implementation to designate that function signature withexternal linkage.153
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.
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 or as a name of namespace scope in the global namespace.
The list of such reserved names includeserrno, declared or defined in .
The list of such reserved function signatures with external linkage includessetjmp(jmp_buf), declared or defined in , andva_end(va_list), declared or defined in.
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.
16.4.5.3.5 Types [extern.types]
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.
16.4.5.3.6 User-defined literal suffixes [usrlit.suffix]
Literal suffix identifiers ([over.literal]) that do not start with an underscore are reserved for future standardization.
Literal suffix identifiers that contain a double underscore__are reserved for use by C++ implementations.