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