OSDN Git Service

2010-07-11 Paolo Carlini <paolo.carlini@oracle.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Jul 2010 09:13:26 +0000 (09:13 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Jul 2010 09:13:26 +0000 (09:13 +0000)
* include/std/type_traits (is_convertible): Use SFINAE.
* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
dg-error line numbers.
* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
Likewise.
* testsuite/20_util/declval/requirements/1_neg.cc: Likewise.

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

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/type_traits
libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc

index d75c55a..d34d242 100644 (file)
@@ -1,3 +1,12 @@
+2010-07-11  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * include/std/type_traits (is_convertible): Use SFINAE.
+       * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
+       dg-error line numbers.
+       * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
+       Likewise.
+       * testsuite/20_util/declval/requirements/1_neg.cc: Likewise.
+
 2010-07-09  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
        PR libstdc++/44875
index 42a462e..f4d0b26 100644 (file)
@@ -307,21 +307,27 @@ namespace std
     { };
 
   template<typename _From, typename _To,
-          bool = (is_void<_From>::value || is_void<_To>::value
-                  || is_function<_To>::value || is_array<_To>::value)>
+          bool = (is_void<_From>::value || is_function<_To>::value
+                  || is_array<_To>::value)>
     struct __is_convertible_helper
-    { static const bool __value = (is_void<_From>::value
-                                  && is_void<_To>::value); };
+    { static const bool __value = is_void<_To>::value; };
 
   template<typename _From, typename _To>
     class __is_convertible_helper<_From, _To, false>
     : public __sfinae_types
     {
-      static __one __test(_To);
-      static __two __test(...);
+      template<typename _To1>
+        static void __test_aux(_To1);
+
+      template<typename _From1, typename _To1>
+        static decltype(__test_aux<_To1>(std::declval<_From1>()), __one())
+       __test(int);
+
+      template<typename, typename>
+        static __two __test(...);
 
     public:
-      static const bool __value = sizeof(__test(declval<_From>())) == 1;
+      static const bool __value = sizeof(__test<_From, _To>(0)) == 1;
     };
 
   /// is_convertible
index 115c323..f0c6546 100644 (file)
@@ -19,7 +19,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-error "static assertion failed" "" { target *-*-* } 676 }
+// { dg-error "static assertion failed" "" { target *-*-* } 682 }
 
 #include <utility>
 
index 8953dac..8a09c65 100644 (file)
@@ -48,5 +48,5 @@ void test01()
 // { dg-error "instantiated from here" "" { target *-*-* } 40 }
 // { dg-error "instantiated from here" "" { target *-*-* } 42 }
 
-// { dg-error "invalid use of incomplete type" "" { target *-*-* } 639 }
-// { dg-error "declaration of" "" { target *-*-* } 603 }
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 645 }
+// { dg-error "declaration of" "" { target *-*-* } 609 }
index e06005d..ba68414 100644 (file)
@@ -48,5 +48,5 @@ void test01()
 // { dg-error "instantiated from here" "" { target *-*-* } 40 }
 // { dg-error "instantiated from here" "" { target *-*-* } 42 }
 
-// { dg-error "invalid use of incomplete type" "" { target *-*-* } 562 }
-// { dg-error "declaration of" "" { target *-*-* } 526 }
+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 568 }
+// { dg-error "declaration of" "" { target *-*-* } 532 }