constexpr_feature_detect.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #ifndef FASTFLOAT_CONSTEXPR_FEATURE_DETECT_H
  2. #define FASTFLOAT_CONSTEXPR_FEATURE_DETECT_H
  3. #ifdef __has_include
  4. #if __has_include(<version>)
  5. #include <version>
  6. #endif
  7. #endif
  8. // Testing for https://wg21.link/N3652, adopted in C++14
  9. #if __cpp_constexpr >= 201304
  10. #define FASTFLOAT_CONSTEXPR14 constexpr
  11. #else
  12. #define FASTFLOAT_CONSTEXPR14
  13. #endif
  14. #if defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L
  15. #define FASTFLOAT_HAS_BIT_CAST 1
  16. #else
  17. #define FASTFLOAT_HAS_BIT_CAST 0
  18. #endif
  19. #if defined(__cpp_lib_is_constant_evaluated) && \
  20. __cpp_lib_is_constant_evaluated >= 201811L
  21. #define FASTFLOAT_HAS_IS_CONSTANT_EVALUATED 1
  22. #else
  23. #define FASTFLOAT_HAS_IS_CONSTANT_EVALUATED 0
  24. #endif
  25. // Testing for relevant C++20 constexpr library features
  26. #if FASTFLOAT_HAS_IS_CONSTANT_EVALUATED && FASTFLOAT_HAS_BIT_CAST && \
  27. __cpp_lib_constexpr_algorithms >= 201806L /*For std::copy and std::fill*/
  28. #define FASTFLOAT_CONSTEXPR20 constexpr
  29. #define FASTFLOAT_IS_CONSTEXPR 1
  30. #else
  31. #define FASTFLOAT_CONSTEXPR20
  32. #define FASTFLOAT_IS_CONSTEXPR 0
  33. #endif
  34. #if __cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
  35. #define FASTFLOAT_DETAIL_MUST_DEFINE_CONSTEXPR_VARIABLE 0
  36. #else
  37. #define FASTFLOAT_DETAIL_MUST_DEFINE_CONSTEXPR_VARIABLE 1
  38. #endif
  39. #endif // FASTFLOAT_CONSTEXPR_FEATURE_DETECT_H