15 Preprocessing directives [cpp]

15.10 Predefined macro names [cpp.predefined]

The following macro names shall be defined by the implementation:
Table 17: 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_­binary_­literals
201304L
_­_­cpp_­capture_­star_­this
201603L
_­_­cpp_­char8_­t
201811L
_­_­cpp_­conditional_­explicit
201806L
_­_­cpp_­constexpr
201603L
_­_­cpp_­coroutines
201902L
_­_­cpp_­decltype
200707L
_­_­cpp_­decltype_­auto
201304L
_­_­cpp_­deduction_­guides
201703L
_­_­cpp_­delegating_­constructors
200604L
_­_­cpp_­enumerator_­attributes
201411L
_­_­cpp_­fold_­expressions
201603L
_­_­cpp_­generic_­lambdas
201304L
_­_­cpp_­guaranteed_­copy_­elision
201606L
_­_­cpp_­hex_­float
201603L
_­_­cpp_­if_­constexpr
201606L
_­_­cpp_­impl_­destroying_­delete
201806L
_­_­cpp_­impl_­three_­way_­comparison
201711L
_­_­cpp_­inheriting_­constructors
201511L
_­_­cpp_­init_­captures
201304L
_­_­cpp_­initializer_­lists
200806L
_­_­cpp_­inline_­variables
201606L
_­_­cpp_­lambdas
200907L
_­_­cpp_­namespace_­attributes
201411L
_­_­cpp_­noexcept_­function_­type
201510L
_­_­cpp_­nontype_­template_­args
201411L
_­_­cpp_­nontype_­template_­parameter_­auto
201606L
_­_­cpp_­nontype_­template_­parameter_­class
201806L
_­_­cpp_­nsdmi
200809L
_­_­cpp_­range_­based_­for
201603L
_­_­cpp_­raw_­strings
200710L
_­_­cpp_­ref_­qualifiers
200710L
_­_­cpp_­return_­type_­deduction
201304L
_­_­cpp_­rvalue_­references
200610L
_­_­cpp_­sized_­deallocation
201309L
_­_­cpp_­static_­assert
201411L
_­_­cpp_­structured_­bindings
201606L
_­_­cpp_­template_­template_­args
201611L
_­_­cpp_­threadsafe_­static_­init
200806L
_­_­cpp_­unicode_­characters
200704L
_­_­cpp_­unicode_­literals
200710L
_­_­cpp_­user_­defined_­literals
200809L
_­_­cpp_­variable_­templates
201304L
_­_­cpp_­variadic_­templates
200704L
_­_­cpp_­variadic_­using
201611L
The following macro names are conditionally defined by the implementation:
The values of the predefined macros (except for __FILE__ and __LINE__) remain constant throughout the translation unit.
If any of the pre-defined macro names in this subclause, or the identifier defined, is the subject of a #define or a #undef preprocessing directive, the behavior is undefined.
Any other predefined macro names shall begin with a leading underscore followed by an uppercase letter or a second underscore.
The presumed source file name can be changed by the #line directive.
The presumed line number can be changed by the #line directive.