Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

186 řádky
6.5 KiB

  1. #pragma once
  2. /* C++ standards */
  3. #if __cplusplus >= 201103L
  4. #define cppmp_supports_cpp11 1
  5. #endif
  6. #if __cplusplus >= 201402L
  7. #define cppmp_supports_cpp14 1
  8. #endif
  9. #if __cplusplus >= 201703L
  10. #define cppmp_supports_cpp17 1
  11. #endif
  12. /* C++ features */
  13. #if __cpp_variable_templates >= 201304L
  14. #define cppmp_supports_variable_templates 1
  15. #endif
  16. #if __cpp_constexpr >= 201603L
  17. #define cppmp_supports_constexpr_lambda 1
  18. #endif
  19. /* GCC */
  20. #ifdef __GNUC__
  21. #define cppmp_gcc_version (__GNUC__ * 10000 \
  22. + __GNUC_MINOR__ * 100 \
  23. + __GNUC_PATCHLEVEL__)
  24. #endif
  25. /* Macros */
  26. #ifdef cppmp_supports_constexpr_lambda
  27. #define cppmp_constexpr_lambda constexpr
  28. #else
  29. #define cppmp_constexpr_lambda
  30. #endif
  31. /* Supported Traits */
  32. #ifdef cppmp_supports_cpp11
  33. #define cppmp_std_supports_remove_const 1
  34. #define cppmp_std_supports_remove_volatile 1
  35. #define cppmp_std_supports_remove_cv 1
  36. #define cppmp_std_supports_add_const 1
  37. #define cppmp_std_supports_add_volatile 1
  38. #define cppmp_std_supports_add_cv 1
  39. #define cppmp_std_supports_remove_reference 1
  40. #define cppmp_std_supports_add_lvalue_reference 1
  41. #define cppmp_std_supports_add_rvalue_reference 1
  42. #define cppmp_std_supports_make_signed 1
  43. #define cppmp_std_supports_make_unsigned 1
  44. #define cppmp_std_supports_remove_extent 1
  45. #define cppmp_std_supports_remove_all_extents 1
  46. #define cppmp_std_supports_add_pointer 1
  47. #define cppmp_std_supports_remove_pointer 1
  48. #define cppmp_std_supports_decay 1
  49. #define cppmp_std_supports_common_type 1
  50. #define cppmp_std_supports_underlying_type 1
  51. #define cppmp_std_supports_aligned_storage 1
  52. #if !defined(cppmp_gcc_version) or cppmp_gcc_version >= 50000
  53. #define cppmp_std_supports_aligned_union 1
  54. #endif
  55. #ifndef cppmp_supports_cpp20
  56. #define cppmp_std_supports_result_of 1
  57. #endif
  58. #define cppmp_std_supports_enable_if 1
  59. #define cppmp_std_supports_conditional 1
  60. #define cppmp_std_supports_is_void 1
  61. #define cppmp_std_supports_is_integral 1
  62. #define cppmp_std_supports_is_floating_point 1
  63. #define cppmp_std_supports_is_array 1
  64. #define cppmp_std_supports_is_pointer 1
  65. #define cppmp_std_supports_is_lvalue_reference 1
  66. #define cppmp_std_supports_is_rvalue_reference 1
  67. #define cppmp_std_supports_is_member_object_pointer 1
  68. #define cppmp_std_supports_is_member_function_pointer 1
  69. #define cppmp_std_supports_is_enum 1
  70. #define cppmp_std_supports_is_union 1
  71. #define cppmp_std_supports_is_class 1
  72. #define cppmp_std_supports_is_function 1
  73. #define cppmp_std_supports_is_reference 1
  74. #define cppmp_std_supports_is_arithmetic 1
  75. #define cppmp_std_supports_is_fundamental 1
  76. #define cppmp_std_supports_is_object 1
  77. #define cppmp_std_supports_is_scalar 1
  78. #define cppmp_std_supports_is_compound 1
  79. #define cppmp_std_supports_is_member_pointer 1
  80. #define cppmp_std_supports_is_const 1
  81. #define cppmp_std_supports_is_volatile 1
  82. #define cppmp_std_supports_is_trivial 1
  83. #define cppmp_std_supports_is_standard_layout 1
  84. #define cppmp_std_supports_is_pod 1
  85. #define cppmp_std_supports_is_empty 1
  86. #define cppmp_std_supports_is_polymorphic 1
  87. #define cppmp_std_supports_is_abstract 1
  88. #define cppmp_std_supports_is_signed 1
  89. #define cppmp_std_supports_is_unsigned 1
  90. #define cppmp_std_supports_is_constructible 1
  91. #define cppmp_std_supports_is_default_constructible 1
  92. #define cppmp_std_supports_is_copy_constructible 1
  93. #define cppmp_std_supports_is_move_constructible 1
  94. #define cppmp_std_supports_is_assignable 1
  95. #define cppmp_std_supports_is_copy_assignable 1
  96. #define cppmp_std_supports_is_move_assignable 1
  97. #define cppmp_std_supports_is_destructible 1
  98. #if !defined(cppmp_gcc_version) or cppmp_gcc_version >= 50000
  99. #define cppmp_std_supports_is_trivially_constructible 1
  100. #define cppmp_std_supports_is_trivially_default_constructible 1
  101. #define cppmp_std_supports_is_trivially_copy_constructible 1
  102. #define cppmp_std_supports_is_trivially_move_constructible 1
  103. #define cppmp_std_supports_is_trivially_assignable 1
  104. #define cppmp_std_supports_is_trivially_copy_assignable 1
  105. #define cppmp_std_supports_is_trivially_move_assignable 1
  106. #define cppmp_std_supports_is_trivially_destructible 1
  107. #define cppmp_std_supports_is_trivially_copyable 1
  108. #endif
  109. #define cppmp_std_supports_is_nothrow_constructible 1
  110. #define cppmp_std_supports_is_nothrow_default_constructible 1
  111. #define cppmp_std_supports_is_nothrow_copy_constructible 1
  112. #define cppmp_std_supports_is_nothrow_move_constructible 1
  113. #define cppmp_std_supports_is_nothrow_assignable 1
  114. #define cppmp_std_supports_is_nothrow_copy_assignable 1
  115. #define cppmp_std_supports_is_nothrow_move_assignable 1
  116. #define cppmp_std_supports_is_nothrow_destructible 1
  117. #define cppmp_std_supports_has_virtual_destructor 1
  118. #define cppmp_std_supports_alignment_of 1
  119. #define cppmp_std_supports_rank 1
  120. #define cppmp_std_supports_extent 1
  121. #define cppmp_std_supports_is_same 1
  122. #define cppmp_std_supports_is_base_of 1
  123. #define cppmp_std_supports_is_convertible 1
  124. #endif
  125. #ifdef cppmp_supports_cpp14
  126. #define cppmp_std_supports_is_null_pointer 1
  127. #define cppmp_std_supports_is_final 1
  128. #endif
  129. #ifdef cppmp_supports_cpp17
  130. #define cppmp_std_supports_invoke_result 1
  131. #define cppmp_std_supports_conjunction 1
  132. #define cppmp_std_supports_disjunction 1
  133. #define cppmp_std_supports_negation 1
  134. #define cppmp_std_supports_is_aggregate 1
  135. #define cppmp_std_supports_is_swappable_with 1
  136. #define cppmp_std_supports_is_swappable 1
  137. #define cppmp_std_supports_is_nothrow_swappable_with 1
  138. #define cppmp_std_supports_is_nothrow_swappable 1
  139. #define cppmp_std_supports_has_unique_object_representations 1
  140. #define cppmp_std_supports_is_invocable 1
  141. #define cppmp_std_supports_is_invocable_r 1
  142. #define cppmp_std_supports_is_nothrow_invocable 1
  143. #define cppmp_std_supports_is_nothrow_invocable_r 1
  144. #endif
  145. #ifdef cppmp_supports_cpp20
  146. #define cppmp_std_supports_remove_cvref 1
  147. #define cppmp_std_supports_is_bounded_array 1
  148. #define cppmp_std_supports_is_unbounded_array 1
  149. #define cppmp_std_supports_has_strong_structural_equality 1
  150. #define cppmp_std_supports_is_nothrow_convertible 1
  151. #define cppmp_std_supports_is_layout_compatible 1
  152. #define cppmp_std_supports_is_pointer_interconvertible_base_of 1
  153. #endif