2012-04-29 Marc Glisse <marc.glisse@inria.fr>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 Apr 2012 09:25:17 +0000 (09:25 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 Apr 2012 09:25:17 +0000 (09:25 +0000)
PR libstdc++/22200
     * include/std/limits (numeric_limits<>::is_modulo): False for
     signed types.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@186944 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/limits

index 269a545..b91668a 100644 (file)
@@ -1,7 +1,14 @@
+2012-04-29  Marc Glisse  <marc.glisse@inria.fr>
+
+       PR libstdc++/22200
+       * include/std/limits (numeric_limits<>::is_modulo): False for
+       signed types.
+
 2012-04-25  Benjamin Kosnik  <bkoz@redhat.com>
 
-       *  include/bits/hashtable.h: Adjust doxygen markup for base classes.
-       *  include/bits/hashtable_policy.h: Same.
+       * include/bits/hashtable.h: Adjust doxygen markup for base
+       classes.
+       * include/bits/hashtable_policy.h: Same.
 
 2012-04-25  Benjamin Kosnik  <bkoz@redhat.com>
 
index e7a6e8f..aff853b 100644 (file)
@@ -270,10 +270,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        false for arbitrary precision types.</em> [18.2.1.2]/54  */
     static _GLIBCXX_USE_CONSTEXPR bool is_bounded = false;
 
-    /** True if the type is @e modulo, that is, if it is possible to add two
-       positive numbers and have a result that wraps around to a third number
-       that is less.  Typically false for floating types, true for unsigned
-       integers, and true for signed integers.  */
+    /** True if the type is @e modulo. A type is modulo if, for any
+       operation involving +, -, or * on values of that type whose
+       result would fall outside the range [min(),max()], the value
+       returned differs from the true value by an integer multiple of
+       max() - min() + 1. On most machines, this is false for floating
+       types, true for unsigned integers, and true for signed integers.
+       See PR22200 about signed integers.  */
     static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
     /** True if trapping is implemented for this type.  */
@@ -494,7 +497,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
 
       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
@@ -564,7 +567,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
@@ -705,7 +708,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = !is_signed;
 
       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
@@ -768,7 +771,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static constexpr bool is_iec559 = false;
       static constexpr bool is_bounded = true;
-      static constexpr bool is_modulo = true;
+      static constexpr bool is_modulo = !is_signed;
 
       static constexpr bool traps = __glibcxx_integral_traps;
       static constexpr bool tinyness_before = false;
@@ -829,7 +832,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static constexpr bool is_iec559 = false;
       static constexpr bool is_bounded = true;
-      static constexpr bool is_modulo = true;
+      static constexpr bool is_modulo = !is_signed;
 
       static constexpr bool traps = __glibcxx_integral_traps;
       static constexpr bool tinyness_before = false;
@@ -896,7 +899,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
@@ -1036,7 +1039,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
@@ -1175,7 +1178,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
@@ -1318,7 +1321,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
       static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps;
       static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false;
@@ -1465,7 +1468,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
       static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false;
       static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
-      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true;
+      static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
 
       static _GLIBCXX_USE_CONSTEXPR bool traps
        = __glibcxx_integral_traps;