#pragma once /* C++ standards */ #if __cplusplus >= 201103L #define cppmp_supports_cpp11 1 #endif #if __cplusplus >= 201402L #define cppmp_supports_cpp14 1 #endif #if __cplusplus >= 201703L #define cppmp_supports_cpp17 1 #endif /* C++ features */ #if __cpp_variable_templates >= 201304L #define cppmp_supports_variable_templates 1 #endif #if __cpp_constexpr >= 201603L #define cppmp_supports_constexpr_lambda 1 #endif /* GCC */ #ifdef __GNUC__ #define cppmp_gcc_version (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) #endif /* Macros */ #ifdef cppmp_supports_constexpr_lambda #define cppmp_constexpr_lambda constexpr #else #define cppmp_constexpr_lambda #endif /* Supported Traits */ #ifdef cppmp_supports_cpp11 #define cppmp_std_supports_remove_const 1 #define cppmp_std_supports_remove_volatile 1 #define cppmp_std_supports_remove_cv 1 #define cppmp_std_supports_add_const 1 #define cppmp_std_supports_add_volatile 1 #define cppmp_std_supports_add_cv 1 #define cppmp_std_supports_remove_reference 1 #define cppmp_std_supports_add_lvalue_reference 1 #define cppmp_std_supports_add_rvalue_reference 1 #define cppmp_std_supports_make_signed 1 #define cppmp_std_supports_make_unsigned 1 #define cppmp_std_supports_remove_extent 1 #define cppmp_std_supports_remove_all_extents 1 #define cppmp_std_supports_add_pointer 1 #define cppmp_std_supports_remove_pointer 1 #define cppmp_std_supports_decay 1 #define cppmp_std_supports_common_type 1 #define cppmp_std_supports_underlying_type 1 #define cppmp_std_supports_aligned_storage 1 #if !defined(cppmp_gcc_version) or cppmp_gcc_version >= 50000 #define cppmp_std_supports_aligned_union 1 #endif #ifndef cppmp_supports_cpp20 #define cppmp_std_supports_result_of 1 #endif #define cppmp_std_supports_enable_if 1 #define cppmp_std_supports_conditional 1 #define cppmp_std_supports_is_void 1 #define cppmp_std_supports_is_integral 1 #define cppmp_std_supports_is_floating_point 1 #define cppmp_std_supports_is_array 1 #define cppmp_std_supports_is_pointer 1 #define cppmp_std_supports_is_lvalue_reference 1 #define cppmp_std_supports_is_rvalue_reference 1 #define cppmp_std_supports_is_member_object_pointer 1 #define cppmp_std_supports_is_member_function_pointer 1 #define cppmp_std_supports_is_enum 1 #define cppmp_std_supports_is_union 1 #define cppmp_std_supports_is_class 1 #define cppmp_std_supports_is_function 1 #define cppmp_std_supports_is_reference 1 #define cppmp_std_supports_is_arithmetic 1 #define cppmp_std_supports_is_fundamental 1 #define cppmp_std_supports_is_object 1 #define cppmp_std_supports_is_scalar 1 #define cppmp_std_supports_is_compound 1 #define cppmp_std_supports_is_member_pointer 1 #define cppmp_std_supports_is_const 1 #define cppmp_std_supports_is_volatile 1 #define cppmp_std_supports_is_trivial 1 #define cppmp_std_supports_is_standard_layout 1 #define cppmp_std_supports_is_pod 1 #define cppmp_std_supports_is_empty 1 #define cppmp_std_supports_is_polymorphic 1 #define cppmp_std_supports_is_abstract 1 #define cppmp_std_supports_is_signed 1 #define cppmp_std_supports_is_unsigned 1 #define cppmp_std_supports_is_constructible 1 #define cppmp_std_supports_is_default_constructible 1 #define cppmp_std_supports_is_copy_constructible 1 #define cppmp_std_supports_is_move_constructible 1 #define cppmp_std_supports_is_assignable 1 #define cppmp_std_supports_is_copy_assignable 1 #define cppmp_std_supports_is_move_assignable 1 #define cppmp_std_supports_is_destructible 1 #if !defined(cppmp_gcc_version) or cppmp_gcc_version >= 50000 #define cppmp_std_supports_is_trivially_constructible 1 #define cppmp_std_supports_is_trivially_default_constructible 1 #define cppmp_std_supports_is_trivially_copy_constructible 1 #define cppmp_std_supports_is_trivially_move_constructible 1 #define cppmp_std_supports_is_trivially_assignable 1 #define cppmp_std_supports_is_trivially_copy_assignable 1 #define cppmp_std_supports_is_trivially_move_assignable 1 #define cppmp_std_supports_is_trivially_destructible 1 #define cppmp_std_supports_is_trivially_copyable 1 #endif #define cppmp_std_supports_is_nothrow_constructible 1 #define cppmp_std_supports_is_nothrow_default_constructible 1 #define cppmp_std_supports_is_nothrow_copy_constructible 1 #define cppmp_std_supports_is_nothrow_move_constructible 1 #define cppmp_std_supports_is_nothrow_assignable 1 #define cppmp_std_supports_is_nothrow_copy_assignable 1 #define cppmp_std_supports_is_nothrow_move_assignable 1 #define cppmp_std_supports_is_nothrow_destructible 1 #define cppmp_std_supports_has_virtual_destructor 1 #define cppmp_std_supports_alignment_of 1 #define cppmp_std_supports_rank 1 #define cppmp_std_supports_extent 1 #define cppmp_std_supports_is_same 1 #define cppmp_std_supports_is_base_of 1 #define cppmp_std_supports_is_convertible 1 #endif #ifdef cppmp_supports_cpp14 #define cppmp_std_supports_is_null_pointer 1 #define cppmp_std_supports_is_final 1 #endif #ifdef cppmp_supports_cpp17 #define cppmp_std_supports_invoke_result 1 #define cppmp_std_supports_conjunction 1 #define cppmp_std_supports_disjunction 1 #define cppmp_std_supports_negation 1 #define cppmp_std_supports_is_aggregate 1 #define cppmp_std_supports_is_swappable_with 1 #define cppmp_std_supports_is_swappable 1 #define cppmp_std_supports_is_nothrow_swappable_with 1 #define cppmp_std_supports_is_nothrow_swappable 1 #define cppmp_std_supports_has_unique_object_representations 1 #define cppmp_std_supports_is_invocable 1 #define cppmp_std_supports_is_invocable_r 1 #define cppmp_std_supports_is_nothrow_invocable 1 #define cppmp_std_supports_is_nothrow_invocable_r 1 #endif #ifdef cppmp_supports_cpp20 #define cppmp_std_supports_remove_cvref 1 #define cppmp_std_supports_is_bounded_array 1 #define cppmp_std_supports_is_unbounded_array 1 #define cppmp_std_supports_has_strong_structural_equality 1 #define cppmp_std_supports_is_nothrow_convertible 1 #define cppmp_std_supports_is_layout_compatible 1 #define cppmp_std_supports_is_pointer_interconvertible_base_of 1 #endif