Files
cppdraft_translate/cppdraft/cpp/predefined.md
2025-10-25 03:02:53 +03:00

14 KiB
Raw Permalink Blame History

[cpp.predefined]

15 Preprocessing directives [cpp]

15.12 Predefined macro names [cpp.predefined]

1

#

The following macro names shall be defined by the implementation:

  • (1.1)

    __cplusplus
    The integer literal 202302L. [Note 1: Future revisions of this document will replace the value of this macro with a greater value. — end note]

  • (1.2)

    The names listed in Table 22.

    The macros defined in Table 22 shall be defined to the corresponding integer literal. [Note 2: Future revisions of this document might replace the values of these macros with greater values. — end note]

  • (1.3)

    DATE
    The date of translation of the source file: a character string literal of the form"Mmm dd yyyy", where the names of the months are the same as those generated by theasctime function, and the first character ofdd is a space character if the value is less than 10. If the date of translation is not available, an implementation-defined valid date shall be supplied.

  • (1.4)

    FILE
    The presumed name of the current source file (a character string literal).129

  • (1.5)

    LINE
    The presumed line number (within the current source file) of the current source line (an integer literal).130

  • (1.6)

    STDC_EMBED_NOT_FOUND, STDC_EMBED_FOUND, and STDC_EMBED_EMPTY
    The integer literals 0, 1, and 2, respectively. [Note 3: These represent values replaced from has-embed-expressions ([cpp.cond]). — end note]

  • (1.7)

    STDC_HOSTED
    The integer literal 1 if the implementation is a hosted implementation or the integer literal 0 if it is a freestanding implementation ([intro.compliance]).

  • (1.8)

    STDCPP_DEFAULT_NEW_ALIGNMENT
    An integer literal of type std::size_t whose value is the alignment guaranteed by a call to operator new(std::size_t) or operator new. [Note 4: Larger alignments will be passed tooperator new(std::size_t, std::align_val_t), etc. ([expr.new]). — end note]

  • (1.9)

    STDCPP_FLOAT16_T
    Defined as the integer literal 1 if and only if the implementation supports the ISO/IEC 60559 floating-point interchange format binary16 as an extended floating-point type ([basic.extended.fp]).

  • (1.10)

    STDCPP_FLOAT32_T
    Defined as the integer literal 1 if and only if the implementation supports the ISO/IEC 60559 floating-point interchange format binary32 as an extended floating-point type.

  • (1.11)

    STDCPP_FLOAT64_T
    Defined as the integer literal 1 if and only if the implementation supports the ISO/IEC 60559 floating-point interchange format binary64 as an extended floating-point type.

  • (1.12)

    STDCPP_FLOAT128_T
    Defined as the integer literal 1 if and only if the implementation supports the ISO/IEC 60559 floating-point interchange format binary128 as an extended floating-point type.

  • (1.13)

    STDCPP_BFLOAT16_T
    Defined as the integer literal 1 if and only if the implementation supports an extended floating-point type with the properties of the typedef-name std::bfloat16_t as described in [basic.extended.fp].

  • (1.14)

    TIME
    The time of translation of the source file: a character string literal of the form"hh:mm:ss" as in the time generated by theasctime function. If the time of translation is not available, an implementation-defined valid time shall be supplied.

Table 22 — Feature-test macros [tab:cpp.predefined.ft]

🔗
Macro name
Value
🔗
__cpp_aggregate_bases
201603L
🔗
__cpp_aggregate_nsdmi
201304L
🔗
__cpp_aggregate_paren_init
201902L
🔗
__cpp_alias_templates
200704L
🔗
__cpp_aligned_new
201606L
🔗
__cpp_attributes
200809L
🔗
__cpp_auto_cast
202110L
🔗
__cpp_binary_literals
201304L
🔗
__cpp_capture_star_this
201603L
🔗
__cpp_char8_t
202207L
🔗
__cpp_concepts
202002L
🔗
__cpp_conditional_explicit
201806L
🔗
__cpp_constexpr
202406L
🔗
__cpp_constexpr_dynamic_alloc
201907L
🔗
__cpp_constexpr_exceptions
202411L
🔗
__cpp_constexpr_in_decltype
201711L
🔗
__cpp_constexpr_virtual_inheritance
202506L
🔗
__cpp_consteval
202211L
🔗
__cpp_constinit
201907L
🔗
__cpp_contracts
202502L
🔗
__cpp_decltype
200707L
🔗
__cpp_decltype_auto
201304L
🔗
__cpp_deduction_guides
201907L
🔗
__cpp_delegating_constructors
200604L
🔗
__cpp_deleted_function
202403L
🔗
__cpp_designated_initializers
201707L
🔗
__cpp_enumerator_attributes
201411L
🔗
__cpp_expansion_statements
202506L
🔗
__cpp_explicit_this_parameter
202110L
🔗
__cpp_fold_expressions
201603L
🔗
__cpp_generic_lambdas
201707L
🔗
__cpp_guaranteed_copy_elision
201606L
🔗
__cpp_hex_float
201603L
🔗
__cpp_if_consteval
202106L
🔗
__cpp_if_constexpr
201606L
🔗
__cpp_impl_coroutine
201902L
🔗
__cpp_impl_destroying_delete
201806L
🔗
__cpp_impl_three_way_comparison
201907L
🔗
__cpp_impl_reflection
202506L
🔗
__cpp_implicit_move
202207L
🔗
__cpp_inheriting_constructors
201511L
🔗
__cpp_init_captures
201803L
🔗
__cpp_initializer_lists
200806L
🔗
__cpp_inline_variables
201606L
🔗
__cpp_lambdas
200907L
🔗
__cpp_modules
201907L
🔗
__cpp_multidimensional_subscript
202211L
🔗
__cpp_named_character_escapes
202207L
🔗
__cpp_namespace_attributes
201411L
🔗
__cpp_noexcept_function_type
201510L
🔗
__cpp_nontype_template_args
201911L
🔗
__cpp_nontype_template_parameter_auto
201606L
🔗
__cpp_nsdmi
200809L
🔗
__cpp_pack_indexing
202311L
🔗
__cpp_placeholder_variables
202306L
🔗
__cpp_pp_embed
202502L
🔗
__cpp_range_based_for
202211L
🔗
__cpp_raw_strings
200710L
🔗
__cpp_ref_qualifiers
200710L
🔗
__cpp_return_type_deduction
201304L
🔗
__cpp_rvalue_references
200610L
🔗
__cpp_size_t_suffix
202011L
🔗
__cpp_sized_deallocation
201309L
🔗
__cpp_static_assert
202306L
🔗
__cpp_static_call_operator
202207L
🔗
__cpp_structured_bindings
202411L
🔗
__cpp_template_parameters
202502L
🔗
__cpp_template_template_args
201611L
🔗
__cpp_threadsafe_static_init
200806L
🔗
__cpp_trivial_relocatability
202502L
🔗
__cpp_trivial_union
202502L
🔗
__cpp_unicode_characters
200704L
🔗
__cpp_unicode_literals
200710L
🔗
__cpp_user_defined_literals
200809L
🔗
__cpp_using_enum
201907L
🔗
__cpp_variable_templates
201304L
🔗
__cpp_variadic_friend
202403L
🔗
__cpp_variadic_templates
200704L
🔗
__cpp_variadic_using
201611L

2

#

The following macro names are conditionally defined by the implementation:

  • (2.1)

    STDC
    Whether STDC is predefined and if so, what its value is, are implementation-defined.

  • (2.2)

    STDC_MB_MIGHT_NEQ_WC
    The integer literal 1, intended to indicate that, in the encoding forwchar_t, a member of the basic character set need not have a code value equal to its value when used as the lone character in an ordinary character literal.

  • (2.3)

    STDC_VERSION
    Whether STDC_VERSION is predefined and if so, what its value is, are implementation-defined.

  • (2.4)

    STDC_ISO_10646
    An integer literal of the form yyyymmL (for example, 199712L). Whether STDC_ISO_10646 is predefined and if so, what its value is, are implementation-defined.

  • (2.5)

    STDCPP_THREADS
    Defined, and has the value integer literal 1, if and only if a program can have more than one thread of execution.

3

#

The values of the predefined macros (except for__FILE__ and__LINE__) remain constant throughout the translation unit.

4

#

If any of the pre-defined macro names in this subclause, or the identifierdefined, is the subject of a#define or a#undef preprocessing directive, the program is ill-formed.

Any other predefined macro names shall begin with a leading underscore followed by an uppercase letter or a second underscore.

129)129)

The presumed source file name can be changed by the #line directive.

130)130)

The presumed line number can be changed by the #line directive.