[reserved.names] (original) (raw)
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:
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:
The header names shown in Table 41 are reserved for previous standardization:
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.
A translation unit shall not #define or #undefnames lexically identical to keywords, to the identifiers listed in Table 4, or to the attribute-tokens described in [dcl.attr], except that the names likely and unlikely may be defined as function-like macros ([cpp.replace]).
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,152both 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,154or as a name of namespace scope in the global namespace.
16.4.5.3.5 Types [extern.types]
For each type T from the C standard library, the typesβ::βTandstdβ::βTare reserved to the implementation and, when defined,β::βTshall 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.