From 4c23c47ebea5940ef634d4de23aa5c71f1f4c74d Mon Sep 17 00:00:00 2001 From: John Maddock Date: Mon, 23 Nov 2009 13:23:15 +0000 Subject: [PATCH] Add support for MS style __int64 when long long is not available. Fixes #3084. [SVN r57863] --- include/boost/integer_fwd.hpp | 2 +- include/boost/integer_traits.hpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/boost/integer_fwd.hpp b/include/boost/integer_fwd.hpp index 34183d8..ae3d0f1 100644 --- a/include/boost/integer_fwd.hpp +++ b/include/boost/integer_fwd.hpp @@ -65,7 +65,7 @@ template < > template < > class integer_traits< unsigned long >; -#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && defined(BOOST_HAS_LONG_LONG) +#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) && (defined(BOOST_HAS_LONG_LONG) || defined(BOOST_HAS_MS_INT64)) template < > class integer_traits< ::boost::long_long_type>; diff --git a/include/boost/integer_traits.hpp b/include/boost/integer_traits.hpp index 8011618..34b3570 100644 --- a/include/boost/integer_traits.hpp +++ b/include/boost/integer_traits.hpp @@ -236,6 +236,20 @@ class integer_traits< ::boost::ulong_long_type> public detail::integer_traits_base< ::boost::ulong_long_type, 0, ~0uLL> { }; +#elif defined(BOOST_HAS_MS_INT64) + +template<> +class integer_traits< __int64> + : public std::numeric_limits< __int64>, + public detail::integer_traits_base< __int64, _I64_MIN, _I64_MAX> +{ }; + +template<> +class integer_traits< unsigned __int64> + : public std::numeric_limits< unsigned __int64>, + public detail::integer_traits_base< unsigned __int64, 0, _UI64_MAX> +{ }; + #endif #endif