From 7ea0caa72c2a9ee1264cac049541154efe939ea0 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 23 Nov 2020 05:20:28 +0200 Subject: [PATCH] Use std:: functions, except on msvc-11.0 and below --- include/boost/lexical_cast/detail/inf_nan.hpp | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/include/boost/lexical_cast/detail/inf_nan.hpp b/include/boost/lexical_cast/detail/inf_nan.hpp index 72a2ae9..5db7182 100644 --- a/include/boost/lexical_cast/detail/inf_nan.hpp +++ b/include/boost/lexical_cast/detail/inf_nan.hpp @@ -32,7 +32,6 @@ #include #include #include -#include #if defined(_MSC_VER) && _MSC_VER < 1800 # include #endif @@ -51,29 +50,39 @@ namespace boost { return true; } + namespace lcast_math + { #if defined(_MSC_VER) && _MSC_VER < 1800 - template T copysign( T x, T y ) - { - return static_cast( _copysign( static_cast( x ), static_cast( y ) ) ); - } + template T copysign( T x, T y ) + { + return static_cast( _copysign( static_cast( x ), static_cast( y ) ) ); + } - template bool isnan( T x ) - { - return _isnan( static_cast( x ) ) != 0; - } + template bool isnan( T x ) + { + return _isnan( static_cast( x ) ) != 0; + } - template bool isinf( T x ) - { - return ( _fpclass( static_cast( x ) ) & ( _FPCLASS_PINF | _FPCLASS_NINF ) ) != 0; - } + template bool isinf( T x ) + { + return ( _fpclass( static_cast( x ) ) & ( _FPCLASS_PINF | _FPCLASS_NINF ) ) != 0; + } - template bool signbit( T x ) - { - return _copysign( 1.0, static_cast( x ) ) < 0.0; - } + template bool signbit( T x ) + { + return _copysign( 1.0, static_cast( x ) ) < 0.0; + } + +#else + + using ::copysign; // it is what it is + using std::isnan; + using std::isinf; + using std::signbit; #endif + } // namespace lcast_math /* Returns true and sets the correct value if found NaN or Inf. */ template @@ -105,7 +114,7 @@ namespace boost { } if( !has_minus ) value = std::numeric_limits::quiet_NaN(); - else value = copysign(std::numeric_limits::quiet_NaN(), static_cast(-1)); + else value = lcast_math::copysign(std::numeric_limits::quiet_NaN(), static_cast(-1)); return true; } else if ( ( /* 'INF' or 'inf' */ @@ -132,12 +141,9 @@ namespace boost { , const CharT* lc_nan , const CharT* lc_infinity) BOOST_NOEXCEPT { -#if defined(__GNUC__) - using std::signbit; -#endif const CharT minus = lcast_char_constants::minus; - if (isnan(value)) { - if (signbit(value)) { + if (lcast_math::isnan(value)) { + if (lcast_math::signbit(value)) { *begin = minus; ++ begin; } @@ -145,8 +151,8 @@ namespace boost { std::memcpy(begin, lc_nan, 3 * sizeof(CharT)); end = begin + 3; return true; - } else if (isinf(value)) { - if (signbit(value)) { + } else if (lcast_math::isinf(value)) { + if (lcast_math::signbit(value)) { *begin = minus; ++ begin; }