[cpp.predefined] # 15 Preprocessing directives [[cpp]](./#cpp) ## 15.12 Predefined macro names [cpp.predefined] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2173) The following macro names shall be defined by the implementation: - [(1.1)](#1.1) __cplusplus The integer literal 202302L[.](#1.1.sentence-2) [*Note [1](#note-1)*: Future revisions of this document will replace the value of this macro with a greater value[.](#1.1.sentence-3) — *end note*] - [(1.2)](#1.2) The names listed in Table [22](#tab:cpp.predefined.ft "Table 22: Feature-test macros")[.](#1.2.sentence-1) The macros defined in Table [22](#tab:cpp.predefined.ft "Table 22: Feature-test macros") shall be defined to the corresponding integer literal[.](#1.2.sentence-2) [*Note [2](#note-2)*: Future revisions of this document might replace the values of these macros with greater values[.](#1.2.sentence-3) — *end note*] - [(1.3)](#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[.](#1.3.sentence-2) If the date of translation is not available, an implementation-defined valid date shall be supplied[.](#1.3.sentence-3) - [(1.4)](#1.4) __FILE__ The presumed name of the current source file (a character string literal)[.](#1.4.sentence-2)[129](#footnote-129 "The presumed source file name can be changed by the #line directive.") - [(1.5)](#1.5) __LINE__ The presumed line number (within the current source file) of the current source line (an integer literal)[.](#1.5.sentence-2)[130](#footnote-130 "The presumed line number can be changed by the #line directive.") - [(1.6)](#1.6) __STDC_EMBED_NOT_FOUND__, __STDC_EMBED_FOUND__, and __STDC_EMBED_EMPTY__ The integer literals 0, 1, and 2, respectively[.](#1.6.sentence-2) [*Note [3](#note-3)*: These represent values replaced from [*has-embed-expression*](cpp.cond#nt:has-embed-expression "15.2 Conditional inclusion [cpp.cond]")*s* ([[cpp.cond]](cpp.cond "15.2 Conditional inclusion"))[.](#1.6.sentence-3) — *end note*] - [(1.7)](#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]](intro.compliance "4.1 Implementation compliance"))[.](#1.7.sentence-2) - [(1.8)](#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[](std​::​size_t)[.](#1.8.sentence-2) [*Note [4](#note-4)*: Larger alignments will be passed tooperator new(std​::​size_t, std​::​align_val_t), etc[.](#1.8.sentence-3) ([[expr.new]](expr.new "7.6.2.8 New"))[.](#1.8.sentence-4) — *end note*] - [(1.9)](#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]](basic.extended.fp "6.9.3 Optional extended floating-point types"))[.](#1.9.sentence-2) - [(1.10)](#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.10.sentence-2) - [(1.11)](#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.11.sentence-2) - [(1.12)](#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.12.sentence-2) - [(1.13)](#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*](dcl.typedef#nt:typedef-name "9.2.4 The typedef specifier [dcl.typedef]") std​::​bfloat16_t as described in [[basic.extended.fp]](basic.extended.fp "6.9.3 Optional extended floating-point types")[.](#1.13.sentence-2) - [(1.14)](#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[.](#1.14.sentence-2) If the time of translation is not available, an implementation-defined valid time shall be supplied[.](#1.14.sentence-3) Table [22](#tab:cpp.predefined.ft) — Feature-test macros [[tab:cpp.predefined.ft]](./tab:cpp.predefined.ft) | [🔗](#tab:cpp.predefined.ft-row-1)
**Macro name** | **Value** | | --- | --- | | [🔗](#tab:cpp.predefined.ft-row-2)
__cpp_aggregate_bases | 201603L | | [🔗](#tab:cpp.predefined.ft-row-3)
__cpp_aggregate_nsdmi | 201304L | | [🔗](#tab:cpp.predefined.ft-row-4)
__cpp_aggregate_paren_init | 201902L | | [🔗](#tab:cpp.predefined.ft-row-5)
__cpp_alias_templates | 200704L | | [🔗](#tab:cpp.predefined.ft-row-6)
__cpp_aligned_new | 201606L | | [🔗](#tab:cpp.predefined.ft-row-7)
__cpp_attributes | 200809L | | [🔗](#tab:cpp.predefined.ft-row-8)
__cpp_auto_cast | 202110L | | [🔗](#tab:cpp.predefined.ft-row-9)
__cpp_binary_literals | 201304L | | [🔗](#tab:cpp.predefined.ft-row-10)
__cpp_capture_star_this | 201603L | | [🔗](#tab:cpp.predefined.ft-row-11)
__cpp_char8_t | 202207L | | [🔗](#tab:cpp.predefined.ft-row-12)
__cpp_concepts | 202002L | | [🔗](#tab:cpp.predefined.ft-row-13)
__cpp_conditional_explicit | 201806L | | [🔗](#tab:cpp.predefined.ft-row-14)
__cpp_constexpr | 202406L | | [🔗](#tab:cpp.predefined.ft-row-15)
__cpp_constexpr_dynamic_alloc | 201907L | | [🔗](#tab:cpp.predefined.ft-row-16)
__cpp_constexpr_exceptions | 202411L | | [🔗](#tab:cpp.predefined.ft-row-17)
__cpp_constexpr_in_decltype | 201711L | | [🔗](#tab:cpp.predefined.ft-row-18)
__cpp_constexpr_virtual_inheritance | 202506L | | [🔗](#tab:cpp.predefined.ft-row-19)
__cpp_consteval | 202211L | | [🔗](#tab:cpp.predefined.ft-row-20)
__cpp_constinit | 201907L | | [🔗](#tab:cpp.predefined.ft-row-21)
__cpp_contracts | 202502L | | [🔗](#tab:cpp.predefined.ft-row-22)
__cpp_decltype | 200707L | | [🔗](#tab:cpp.predefined.ft-row-23)
__cpp_decltype_auto | 201304L | | [🔗](#tab:cpp.predefined.ft-row-24)
__cpp_deduction_guides | 201907L | | [🔗](#tab:cpp.predefined.ft-row-25)
__cpp_delegating_constructors | 200604L | | [🔗](#tab:cpp.predefined.ft-row-26)
__cpp_deleted_function | 202403L | | [🔗](#tab:cpp.predefined.ft-row-27)
__cpp_designated_initializers | 201707L | | [🔗](#tab:cpp.predefined.ft-row-28)
__cpp_enumerator_attributes | 201411L | | [🔗](#tab:cpp.predefined.ft-row-29)
__cpp_expansion_statements | 202506L | | [🔗](#tab:cpp.predefined.ft-row-30)
__cpp_explicit_this_parameter | 202110L | | [🔗](#tab:cpp.predefined.ft-row-31)
__cpp_fold_expressions | 201603L | | [🔗](#tab:cpp.predefined.ft-row-32)
__cpp_generic_lambdas | 201707L | | [🔗](#tab:cpp.predefined.ft-row-33)
__cpp_guaranteed_copy_elision | 201606L | | [🔗](#tab:cpp.predefined.ft-row-34)
__cpp_hex_float | 201603L | | [🔗](#tab:cpp.predefined.ft-row-35)
__cpp_if_consteval | 202106L | | [🔗](#tab:cpp.predefined.ft-row-36)
__cpp_if_constexpr | 201606L | | [🔗](#tab:cpp.predefined.ft-row-37)
__cpp_impl_coroutine | 201902L | | [🔗](#tab:cpp.predefined.ft-row-38)
__cpp_impl_destroying_delete | 201806L | | [🔗](#tab:cpp.predefined.ft-row-39)
__cpp_impl_three_way_comparison | 201907L | | [🔗](#tab:cpp.predefined.ft-row-40)
__cpp_impl_reflection | 202506L | | [🔗](#tab:cpp.predefined.ft-row-41)
__cpp_implicit_move | 202207L | | [🔗](#tab:cpp.predefined.ft-row-42)
__cpp_inheriting_constructors | 201511L | | [🔗](#tab:cpp.predefined.ft-row-43)
__cpp_init_captures | 201803L | | [🔗](#tab:cpp.predefined.ft-row-44)
__cpp_initializer_lists | 200806L | | [🔗](#tab:cpp.predefined.ft-row-45)
__cpp_inline_variables | 201606L | | [🔗](#tab:cpp.predefined.ft-row-46)
__cpp_lambdas | 200907L | | [🔗](#tab:cpp.predefined.ft-row-47)
__cpp_modules | 201907L | | [🔗](#tab:cpp.predefined.ft-row-48)
__cpp_multidimensional_subscript | 202211L | | [🔗](#tab:cpp.predefined.ft-row-49)
__cpp_named_character_escapes | 202207L | | [🔗](#tab:cpp.predefined.ft-row-50)
__cpp_namespace_attributes | 201411L | | [🔗](#tab:cpp.predefined.ft-row-51)
__cpp_noexcept_function_type | 201510L | | [🔗](#tab:cpp.predefined.ft-row-52)
__cpp_nontype_template_args | 201911L | | [🔗](#tab:cpp.predefined.ft-row-53)
__cpp_nontype_template_parameter_auto | 201606L | | [🔗](#tab:cpp.predefined.ft-row-54)
__cpp_nsdmi | 200809L | | [🔗](#tab:cpp.predefined.ft-row-55)
__cpp_pack_indexing | 202311L | | [🔗](#tab:cpp.predefined.ft-row-56)
__cpp_placeholder_variables | 202306L | | [🔗](#tab:cpp.predefined.ft-row-57)
__cpp_pp_embed | 202502L | | [🔗](#tab:cpp.predefined.ft-row-58)
__cpp_range_based_for | 202211L | | [🔗](#tab:cpp.predefined.ft-row-59)
__cpp_raw_strings | 200710L | | [🔗](#tab:cpp.predefined.ft-row-60)
__cpp_ref_qualifiers | 200710L | | [🔗](#tab:cpp.predefined.ft-row-61)
__cpp_return_type_deduction | 201304L | | [🔗](#tab:cpp.predefined.ft-row-62)
__cpp_rvalue_references | 200610L | | [🔗](#tab:cpp.predefined.ft-row-63)
__cpp_size_t_suffix | 202011L | | [🔗](#tab:cpp.predefined.ft-row-64)
__cpp_sized_deallocation | 201309L | | [🔗](#tab:cpp.predefined.ft-row-65)
__cpp_static_assert | 202306L | | [🔗](#tab:cpp.predefined.ft-row-66)
__cpp_static_call_operator | 202207L | | [🔗](#tab:cpp.predefined.ft-row-67)
__cpp_structured_bindings | 202411L | | [🔗](#tab:cpp.predefined.ft-row-68)
__cpp_template_parameters | 202502L | | [🔗](#tab:cpp.predefined.ft-row-69)
__cpp_template_template_args | 201611L | | [🔗](#tab:cpp.predefined.ft-row-70)
__cpp_threadsafe_static_init | 200806L | | [🔗](#tab:cpp.predefined.ft-row-71)
__cpp_trivial_relocatability | 202502L | | [🔗](#tab:cpp.predefined.ft-row-72)
__cpp_trivial_union | 202502L | | [🔗](#tab:cpp.predefined.ft-row-73)
__cpp_unicode_characters | 200704L | | [🔗](#tab:cpp.predefined.ft-row-74)
__cpp_unicode_literals | 200710L | | [🔗](#tab:cpp.predefined.ft-row-75)
__cpp_user_defined_literals | 200809L | | [🔗](#tab:cpp.predefined.ft-row-76)
__cpp_using_enum | 201907L | | [🔗](#tab:cpp.predefined.ft-row-77)
__cpp_variable_templates | 201304L | | [🔗](#tab:cpp.predefined.ft-row-78)
__cpp_variadic_friend | 202403L | | [🔗](#tab:cpp.predefined.ft-row-79)
__cpp_variadic_templates | 200704L | | [🔗](#tab:cpp.predefined.ft-row-80)
__cpp_variadic_using | 201611L | [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2405) The following macro names are conditionally defined by the implementation: - [(2.1)](#2.1) __STDC__ Whether __STDC__ is predefined and if so, what its value is, are implementation-defined[.](#2.1.sentence-2) - [(2.2)](#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.2.sentence-2) - [(2.3)](#2.3) __STDC_VERSION__ Whether __STDC_VERSION__ is predefined and if so, what its value is, are implementation-defined[.](#2.3.sentence-2) - [(2.4)](#2.4) __STDC_ISO_10646__ An integer literal of the form yyyymmL (for example, 199712L)[.](#2.4.sentence-2) Whether __STDC_ISO_10646__ is predefined and if so, what its value is, are implementation-defined[.](#2.4.sentence-3) - [(2.5)](#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](intro.multithread "6.10.2 Multi-threaded executions and data races [intro.multithread]")[.](#2.5.sentence-2) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2443) The values of the predefined macros (except for__FILE__ and__LINE__) remain constant throughout the translation unit[.](#3.sentence-1) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2451) 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[.](#4.sentence-1) Any other predefined macro names shall begin with a leading underscore followed by an uppercase letter or a second underscore[.](#4.sentence-2) [129)](#footnote-129)[129)](#footnoteref-129) The presumed source file name can be changed by the #line directive[.](#footnote-129.sentence-1) [130)](#footnote-130)[130)](#footnoteref-130) The presumed line number can be changed by the #line directive[.](#footnote-130.sentence-1)