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;