aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2005-04-28 22:35:09 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2005-04-28 22:35:09 +0000
commit152d96766a59ce5047fa8499c0382195f1db2fa8 (patch)
tree3198b8780e3748cf55bd8e2e50c630f2342e98ed
parent973a384d4fb0083ec8a222595f131028f3b68f79 (diff)
downloadgcc-152d96766a59ce5047fa8499c0382195f1db2fa8.zip
gcc-152d96766a59ce5047fa8499c0382195f1db2fa8.tar.gz
gcc-152d96766a59ce5047fa8499c0382195f1db2fa8.tar.bz2
type_traits (is_convertible): Adjust according to the resolution of TR1 issue 3.20.
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. From-SVN: r98944
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/tr1/type_traits7
-rw-r--r--libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc10
3 files changed, 21 insertions, 3 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index a2c94e0..9797785 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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>
diff --git a/libstdc++-v3/include/tr1/type_traits b/libstdc++-v3/include/tr1/type_traits
index 0bd05bb..176a4c3 100644
--- a/libstdc++-v3/include/tr1/type_traits
+++ b/libstdc++-v3/include/tr1/type_traits
@@ -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
diff --git a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc b/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc
index 858bfda..19b360a 100644
--- a/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc
+++ b/libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc
@@ -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()