diff options
author | Paolo Carlini <pcarlini@suse.de> | 2005-04-28 22:35:09 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2005-04-28 22:35:09 +0000 |
commit | 152d96766a59ce5047fa8499c0382195f1db2fa8 (patch) | |
tree | 3198b8780e3748cf55bd8e2e50c630f2342e98ed | |
parent | 973a384d4fb0083ec8a222595f131028f3b68f79 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/type_traits | 7 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_convertible/is_convertible.cc | 10 |
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() |