// Copyright 2005-2009 Daniel James. // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // On some platforms std::limits gives incorrect values for long double. // This tries to work around them. #if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER) #define BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include // On OpenBSD, numeric_limits is not reliable for long doubles, but // the macros defined in are and support long double when STLport // doesn't. #if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE) #include #endif namespace cutl_details_boost { namespace hash_detail { template struct limits : std::numeric_limits {}; #if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE) template <> struct limits : std::numeric_limits { static long double epsilon() { return LDBL_EPSILON; } static long double (max)() { return LDBL_MAX; } static long double (min)() { return LDBL_MIN; } BOOST_STATIC_CONSTANT(int, digits = LDBL_MANT_DIG); BOOST_STATIC_CONSTANT(int, max_exponent = LDBL_MAX_EXP); BOOST_STATIC_CONSTANT(int, min_exponent = LDBL_MIN_EXP); #if defined(_STLP_NO_LONG_DOUBLE) BOOST_STATIC_CONSTANT(int, radix = FLT_RADIX); #endif }; #endif // __OpenBSD__ } } #endif