Add std lib version macros

This commit is contained in:
John Maddock
2021-02-03 11:18:52 +00:00
parent 8a4ef2c2f3
commit 6b9256b47d
2 changed files with 141 additions and 0 deletions

View File

@ -120,6 +120,8 @@ explicit has_clang_implicit_fallthrough ;
exe config_info_printer : config_info.cpp ;
explicit config_info_printer ;
exe math_info_printer : math_info.cpp ;
explicit math_info_printer ;
actions print-run
{
@ -135,6 +137,8 @@ rule print-run ( target : sources * : properties * )
notfile print_config_info : @print-run : config_info_printer ;
explicit print_config_info ;
notfile print_math_info : @print-run : math_info_printer ;
explicit print_math_info ;
# Backwards compatibility:
exe config_info_travis : config_info.cpp ;

View File

@ -1266,10 +1266,147 @@ void print_boost_macros()
PRINT_MACRO(BOOST_NORETURN);
}
#ifdef __has_include
#if __has_include(<version>)
# include <version>
#endif
#endif
void print_sd6_macros()
{
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0096r5.html
// Library macros are only really available if we have <version> :
PRINT_MACRO(__cpp_lib_addressof_constexpr);
PRINT_MACRO(__cpp_lib_allocator_traits_is_always_equal);
PRINT_MACRO(__cpp_lib_any);
PRINT_MACRO(__cpp_lib_apply);
PRINT_MACRO(__cpp_lib_array_constexpr);
PRINT_MACRO(__cpp_lib_as_const);
PRINT_MACRO(__cpp_lib_assume_aligned);
PRINT_MACRO(__cpp_lib_atomic_flag_test);
PRINT_MACRO(__cpp_lib_atomic_float);
PRINT_MACRO(__cpp_lib_atomic_is_always_lock_free);
PRINT_MACRO(__cpp_lib_atomic_lock_free_type_aliases);
PRINT_MACRO(__cpp_lib_atomic_ref);
PRINT_MACRO(__cpp_lib_atomic_shared_ptr);
PRINT_MACRO(__cpp_lib_atomic_value_initialization);
PRINT_MACRO(__cpp_lib_atomic_wait);
PRINT_MACRO(__cpp_lib_barrier);
PRINT_MACRO(__cpp_lib_bind_front);
PRINT_MACRO(__cpp_lib_bit_cast);
PRINT_MACRO(__cpp_lib_bitops);
PRINT_MACRO(__cpp_lib_bool_constant);
PRINT_MACRO(__cpp_lib_bounded_array_traits);
PRINT_MACRO(__cpp_lib_boyer_moore_searcher);
PRINT_MACRO(__cpp_lib_byte);
PRINT_MACRO(__cpp_lib_char8_t);
PRINT_MACRO(__cpp_lib_chrono);
PRINT_MACRO(__cpp_lib_chrono_udls);
PRINT_MACRO(__cpp_lib_clamp);
PRINT_MACRO(__cpp_lib_complex_udls);
PRINT_MACRO(__cpp_lib_concepts);
PRINT_MACRO(__cpp_lib_constexpr_algorithms);
PRINT_MACRO(__cpp_lib_constexpr_complex);
PRINT_MACRO(__cpp_lib_constexpr_dynamic_alloc);
PRINT_MACRO(__cpp_lib_constexpr_functional);
PRINT_MACRO(__cpp_lib_constexpr_iterator);
PRINT_MACRO(__cpp_lib_constexpr_memory);
PRINT_MACRO(__cpp_lib_constexpr_numeric);
PRINT_MACRO(__cpp_lib_constexpr_string);
PRINT_MACRO(__cpp_lib_constexpr_string_view);
PRINT_MACRO(__cpp_lib_constexpr_tuple);
PRINT_MACRO(__cpp_lib_constexpr_utility);
PRINT_MACRO(__cpp_lib_constexpr_vector);
PRINT_MACRO(__cpp_lib_coroutine);
PRINT_MACRO(__cpp_lib_destroying_delete);
PRINT_MACRO(__cpp_lib_enable_shared_from_this);
PRINT_MACRO(__cpp_lib_endian);
PRINT_MACRO(__cpp_lib_erase_if);
PRINT_MACRO(__cpp_lib_exchange_function);
PRINT_MACRO(__cpp_lib_execution);
PRINT_MACRO(__cpp_lib_filesystem);
PRINT_MACRO(__cpp_lib_format);
PRINT_MACRO(__cpp_lib_gcd_lcm);
PRINT_MACRO(__cpp_lib_generic_associative_lookup);
PRINT_MACRO(__cpp_lib_generic_unordered_lookup);
PRINT_MACRO(__cpp_lib_hardware_interference_size);
PRINT_MACRO(__cpp_lib_has_unique_object_representations);
PRINT_MACRO(__cpp_lib_hypot);
PRINT_MACRO(__cpp_lib_incomplete_container_elements);
PRINT_MACRO(__cpp_lib_int_pow2);
PRINT_MACRO(__cpp_lib_integer_comparison_functions);
PRINT_MACRO(__cpp_lib_integer_sequence);
PRINT_MACRO(__cpp_lib_integral_constant_callable);
PRINT_MACRO(__cpp_lib_interpolate);
PRINT_MACRO(__cpp_lib_invoke);
PRINT_MACRO(__cpp_lib_is_aggregate);
PRINT_MACRO(__cpp_lib_is_constant_evaluated);
PRINT_MACRO(__cpp_lib_is_final);
PRINT_MACRO(__cpp_lib_is_invocable);
PRINT_MACRO(__cpp_lib_is_layout_compatible);
PRINT_MACRO(__cpp_lib_is_nothrow_convertible);
PRINT_MACRO(__cpp_lib_is_null_pointer);
PRINT_MACRO(__cpp_lib_is_pointer_interconvertible);
PRINT_MACRO(__cpp_lib_is_swappable);
PRINT_MACRO(__cpp_lib_jthread);
PRINT_MACRO(__cpp_lib_latch);
PRINT_MACRO(__cpp_lib_launder);
PRINT_MACRO(__cpp_lib_list_remove_return_type);
PRINT_MACRO(__cpp_lib_logical_traits);
PRINT_MACRO(__cpp_lib_make_from_tuple);
PRINT_MACRO(__cpp_lib_make_reverse_iterator);
PRINT_MACRO(__cpp_lib_make_unique);
PRINT_MACRO(__cpp_lib_map_try_emplace);
PRINT_MACRO(__cpp_lib_math_constants);
PRINT_MACRO(__cpp_lib_math_special_functions);
PRINT_MACRO(__cpp_lib_memory_resource);
PRINT_MACRO(__cpp_lib_node_extract);
PRINT_MACRO(__cpp_lib_nonmember_container_access);
PRINT_MACRO(__cpp_lib_not_fn);
PRINT_MACRO(__cpp_lib_null_iterators);
PRINT_MACRO(__cpp_lib_optional);
PRINT_MACRO(__cpp_lib_parallel_algorithm);
PRINT_MACRO(__cpp_lib_polymorphic_allocator);
PRINT_MACRO(__cpp_lib_quoted_string_io);
PRINT_MACRO(__cpp_lib_ranges);
PRINT_MACRO(__cpp_lib_raw_memory_algorithms);
PRINT_MACRO(__cpp_lib_remove_cvref);
PRINT_MACRO(__cpp_lib_result_of_sfinae);
PRINT_MACRO(__cpp_lib_robust_nonmodifying_seq_ops);
PRINT_MACRO(__cpp_lib_sample);
PRINT_MACRO(__cpp_lib_scoped_lock);
PRINT_MACRO(__cpp_lib_semaphore);
PRINT_MACRO(__cpp_lib_shared_mutex);
PRINT_MACRO(__cpp_lib_shared_ptr_arrays);
PRINT_MACRO(__cpp_lib_shared_ptr_weak_type);
PRINT_MACRO(__cpp_lib_shared_timed_mutex);
PRINT_MACRO(__cpp_lib_shift);
PRINT_MACRO(__cpp_lib_smart_ptr_for_overwrite);
PRINT_MACRO(__cpp_lib_source_location);
PRINT_MACRO(__cpp_lib_span);
PRINT_MACRO(__cpp_lib_ssize);
PRINT_MACRO(__cpp_lib_starts_ends_with);
PRINT_MACRO(__cpp_lib_string_udls);
PRINT_MACRO(__cpp_lib_string_view);
PRINT_MACRO(__cpp_lib_syncbuf);
PRINT_MACRO(__cpp_lib_three_way_comparison);
PRINT_MACRO(__cpp_lib_to_address);
PRINT_MACRO(__cpp_lib_to_array);
PRINT_MACRO(__cpp_lib_to_chars);
PRINT_MACRO(__cpp_lib_transformation_trait_aliases);
PRINT_MACRO(__cpp_lib_transparent_operators);
PRINT_MACRO(__cpp_lib_tuple_element_t);
PRINT_MACRO(__cpp_lib_tuples_by_type);
PRINT_MACRO(__cpp_lib_type_identity);
PRINT_MACRO(__cpp_lib_type_trait_variable_templates);
PRINT_MACRO(__cpp_lib_uncaught_exceptions);
PRINT_MACRO(__cpp_lib_unordered_map_try_emplace);
PRINT_MACRO(__cpp_lib_unwrap_ref);
PRINT_MACRO(__cpp_lib_variant);
PRINT_MACRO(__cpp_lib_void_t);
// C++20:
PRINT_MACRO(__cpp_aggregate_paren_init);
PRINT_MACRO(__cpp_char8_t);