concepts.hpp 987 B

123456789101112131415161718192021222324
  1. // (C) Copyright Matt Borland 2022.
  2. // Use, modification and distribution are subject to the
  3. // Boost Software License, Version 1.0. (See accompanying file
  4. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. //
  6. // Macros that substitute for STL concepts or typename depending on availability of <concepts>
  7. #ifndef BOOST_MATH_TOOLS_CONCEPTS_HPP
  8. #define BOOST_MATH_TOOLS_CONCEPTS_HPP
  9. // LLVM clang supports concepts but apple's clang does not fully support at version 13
  10. // See: https://en.cppreference.com/w/cpp/compiler_support/20
  11. #if (__cplusplus > 202000L || _MSVC_LANG > 202000L)
  12. # if __has_include(<concepts>) && (!defined(__APPLE__) || (defined(__APPLE__) && defined(__clang__) && __clang__ > 13))
  13. # include <concepts>
  14. # define BOOST_MATH_FLOATING_POINT_TYPE std::floating_point
  15. # else
  16. # define BOOST_MATH_FLOATING_POINT_TYPE typename
  17. # endif
  18. #else
  19. # define BOOST_MATH_FLOATING_POINT_TYPE typename
  20. #endif
  21. #endif // BOOST_MATH_TOOLS_CONCEPTS_HPP