bugs.hpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /* Boost interval/detail/bugs.hpp file
  2. *
  3. * Copyright 2000 Jens Maurer
  4. * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
  5. *
  6. * Distributed under the Boost Software License, Version 1.0.
  7. * (See accompanying file LICENSE_1_0.txt or
  8. * copy at http://www.boost.org/LICENSE_1_0.txt)
  9. */
  10. #ifndef BOOST_NUMERIC_INTERVAL_DETAIL_BUGS
  11. #define BOOST_NUMERIC_INTERVAL_DETAIL_BUGS
  12. #include <boost/config.hpp>
  13. #if defined(__GLIBC__) && (defined(__USE_MISC) || defined(__USE_XOPEN_EXTENDED) || defined(__USE_ISOC99)) && !defined(__ICC)
  14. # define BOOST_HAS_INV_HYPERBOLIC
  15. #endif
  16. #ifdef BOOST_NO_STDC_NAMESPACE
  17. # define BOOST_NUMERIC_INTERVAL_using_math(a) using ::a
  18. # ifdef BOOST_HAS_INV_HYPERBOLIC
  19. # define BOOST_NUMERIC_INTERVAL_using_ahyp(a) using ::a
  20. # endif
  21. #else
  22. # define BOOST_NUMERIC_INTERVAL_using_math(a) using std::a
  23. # if defined(BOOST_HAS_INV_HYPERBOLIC)
  24. # if defined(__GLIBCPP__) || defined(__GLIBCXX__)
  25. # define BOOST_NUMERIC_INTERVAL_using_ahyp(a) using ::a
  26. # else
  27. # define BOOST_NUMERIC_INTERVAL_using_ahyp(a) using std::a
  28. # endif
  29. # endif
  30. #endif
  31. #if defined(__COMO__) || defined(BOOST_INTEL)
  32. # define BOOST_NUMERIC_INTERVAL_using_max(a) using std::a
  33. #elif defined(BOOST_NO_STDC_NAMESPACE)
  34. # define BOOST_NUMERIC_INTERVAL_using_max(a) using ::a
  35. #else
  36. # define BOOST_NUMERIC_INTERVAL_using_max(a) using std::a
  37. #endif
  38. #ifndef BOOST_NUMERIC_INTERVAL_using_ahyp
  39. # define BOOST_NUMERIC_INTERVAL_using_ahyp(a)
  40. #endif
  41. #if defined(__GNUC__) && (__GNUC__ <= 2)
  42. // cf PR c++/1981 for a description of the bug
  43. #include <algorithm>
  44. #include <boost/config/no_tr1/cmath.hpp>
  45. namespace boost {
  46. namespace numeric {
  47. using std::min;
  48. using std::max;
  49. using std::sqrt;
  50. using std::exp;
  51. using std::log;
  52. using std::cos;
  53. using std::tan;
  54. using std::asin;
  55. using std::acos;
  56. using std::atan;
  57. using std::ceil;
  58. using std::floor;
  59. using std::sinh;
  60. using std::cosh;
  61. using std::tanh;
  62. # undef BOOST_NUMERIC_INTERVAL_using_max
  63. # undef BOOST_NUMERIC_INTERVAL_using_math
  64. # define BOOST_NUMERIC_INTERVAL_using_max(a)
  65. # define BOOST_NUMERIC_INTERVAL_using_math(a)
  66. # undef BOOST_NUMERIC_INTERVAL_using_ahyp
  67. # define BOOST_NUMERIC_INTERVAL_using_ahyp(a)
  68. } // namespace numeric
  69. } // namespace boost
  70. #endif
  71. #endif // BOOST_NUMERIC_INTERVAL_DETAIL_BUGS