Importable header "a.h":#define X 123 // #1 #define Y 45 // #2 #define Z a // #3 #undef X // point of undefinition of #1 in "a.h"
Importable header "b.h":import "a.h"; // point of definition of #1, #2, and #3, point of undefinition of #1 in "b.h" #define X 456 // OK, #1 is not active #define Y 6 // error: #2 is active
Importable header "c.h":#define Y 45 // #4 #define Z c // #5
Importable header "d.h":import "c.h"; // point of definition of #4 and #5 in "d.h"
Importable header "e.h":import "a.h"; // point of definition of #1, #2, and #3, point of undefinition of #1 in "e.h" import "d.h"; // point of definition of #4 and #5 in "e.h" int a = Y; // OK, active macro definitions #2 and #4 are valid redefinitions int c = Z; // error: active macro definitions #3 and #5 are not valid redefinitions of Z
Module unit f:export module f; export import "a.h"; int a = Y; // OK
Translation unit #1:import f; int x = Y; // error: Y is neither a defined macro nor a declared name — end example]
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  |