From f66e844ff1d5a0bc558e1ac0f53d8c7107d6a3d4 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Thu, 8 Dec 2005 03:23:02 +0000 Subject: [PATCH] Merged from Version_1_33_1 [SVN r31949] --- base_from_member.html | 2 +- numeric_traits_test.cpp | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/base_from_member.html b/base_from_member.html index d5cba0b..4dd70f4 100644 --- a/base_from_member.html +++ b/base_from_member.html @@ -351,7 +351,7 @@ with the exact pointer type used in switcher's constructor.

Jonathan Turkanis
Supplied an implementation of generating the constructor templates that can be controlled and automated with macros. The implementation uses - the Preprocessor library. + the Preprocessor library.
Daryle Walker
Started the library. Contributed the test file prev; public: +#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2 + // GCC 4.0.2 ICEs on these C-style casts + BOOST_STATIC_CONSTANT(Number, max = + Number((prev::max) << CHAR_BIT) + + Number(UCHAR_MAX)); + BOOST_STATIC_CONSTANT(Number, min = Number((prev::min) << CHAR_BIT)); +#else BOOST_STATIC_CONSTANT(Number, max = Number(Number(prev::max) << CHAR_BIT) + Number(UCHAR_MAX)); - BOOST_STATIC_CONSTANT(Number, min = Number(Number(prev::min) << CHAR_BIT)); +#endif + }; }; @@ -221,10 +229,16 @@ void test_aux(unsigned_tag, Number*) (sizeof(Number) < sizeof(boost::intmax_t)) | (boost::is_same::value)); +#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2 + // GCC 4.0.2 ICEs on this C-style cases + BOOST_STATIC_ASSERT((complement_traits::max) > Number(0)); + BOOST_STATIC_ASSERT((complement_traits::min) == Number(0)); +#else // Force casting to Number here to work around the fact that it's an enum on MSVC BOOST_STATIC_ASSERT(Number(complement_traits::max) > Number(0)); BOOST_STATIC_ASSERT(Number(complement_traits::min) == Number(0)); - +#endif + const Number max = complement_traits::max; const Number min = complement_traits::min; @@ -308,10 +322,15 @@ void test_aux(signed_tag, Number*) (sizeof(Number) < sizeof(boost::intmax_t)) | (boost::is_same::value)); +#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2 + // GCC 4.0.2 ICEs on this cast + BOOST_STATIC_ASSERT((complement_traits::max) > Number(0)); + BOOST_STATIC_ASSERT((complement_traits::min) < Number(0)); +#else // Force casting to Number here to work around the fact that it's an enum on MSVC BOOST_STATIC_ASSERT(Number(complement_traits::max) > Number(0)); BOOST_STATIC_ASSERT(Number(complement_traits::min) < Number(0)); - +#endif const Number max = complement_traits::max; const Number min = complement_traits::min;