[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:

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.