OSDN Git Service

2005-04-29 Paolo Carlini <pcarlini@suse.de>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Apr 2005 22:35:09 +0000 (22:35 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Apr 2005 22:35:09 +0000 (22:35 +0000)
* include/tr1/type_traits (is_convertible): Adjust according
to the resolution of TR1 issue 3.20.
* testsuite/tr1/4_metaprogramming/relationships_between_types/
is_convertible/is_convertible.cc: Add tests.

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

libstdc++-v3/ChangeLog
libstdc++-v3/include/tr1/type_traits
libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc

index a2c94e0..9797785 100644 (file)
@@ -1,3 +1,10 @@
+2005-04-29  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/tr1/type_traits (is_convertible): Adjust according
+       to the resolution of TR1 issue 3.20.
+       * testsuite/tr1/4_metaprogramming/relationships_between_types/
+       is_convertible/is_convertible.cc: Add tests.
+
 2005-04-28  Paolo Carlini  <pcarlini@suse.de>
            Gabriel Dos Reis  <gdr@integrable-solutions.net>
 
index 0bd05bb..176a4c3 100644 (file)
@@ -501,7 +501,8 @@ namespace tr1
     };
 
   template<typename _From, typename _To,
-          bool = (is_function<_To>::value || is_array<_To>::value
+          bool = (is_void<_From>::value || is_void<_To>::value
+                  || is_function<_To>::value || is_array<_To>::value
                   // This special case is here only to avoid warnings.            
                   || (is_floating_point<typename
                       remove_reference<_From>::type>::value
@@ -515,7 +516,9 @@ namespace tr1
 
   template<typename _From, typename _To>
     struct __is_convertible_helper<_From, _To, true>
-    { static const bool __value = __is_int_or_cref<_To>::__value; };
+    { static const bool __value = (is_void<_To>::value
+                                  || (__is_int_or_cref<_To>::__value
+                                      && !is_void<_From>::value)); };
 
   template<typename _From, typename _To>
     struct is_convertible
index 858bfda..19b360a 100644 (file)
@@ -54,6 +54,10 @@ void test01()
   VERIFY( (test_relationship<is_convertible, DerivedType*, ClassType*>(true)) );
   VERIFY( (test_relationship<is_convertible, DerivedType&, ClassType&>(true)) );
 
+  VERIFY( (test_relationship<is_convertible, void, void>(true)) );
+  VERIFY( (test_relationship<is_convertible, int, void>(true)) );
+  VERIFY( (test_relationship<is_convertible, int[4], void>(true)) );  
+
   // Negative tests.
   VERIFY( (test_relationship<is_convertible, const int*, int*>(false)) );
   VERIFY( (test_relationship<is_convertible, int*, float*>(false)) );
@@ -69,7 +73,11 @@ void test01()
   VERIFY( (test_relationship<is_convertible, int, ClassType>(false)) );
   VERIFY( (test_relationship<is_convertible, ClassType, DerivedType>(false)) );
   VERIFY( (test_relationship<is_convertible, ClassType*, DerivedType*>(false)) );
-  VERIFY( (test_relationship<is_convertible, ClassType&, DerivedType&>(false)) );  
+  VERIFY( (test_relationship<is_convertible, ClassType&, DerivedType&>(false)) );
+
+  VERIFY( (test_relationship<is_convertible, void, int>(false)) );
+  VERIFY( (test_relationship<is_convertible, void, float>(false)) );  
+  VERIFY( (test_relationship<is_convertible, void, int(*)(int)>(false)) );  
 }
 
 int main()