diff options
author | Benjamin Kosnik <bkoz@redhat.com> | 2007-05-08 12:10:48 +0000 |
---|---|---|
committer | Benjamin Kosnik <bkoz@gcc.gnu.org> | 2007-05-08 12:10:48 +0000 |
commit | fb8ffd109a098d6682e0687ee083fa1c3b80d0b4 (patch) | |
tree | d25b7c3e4197458a7f88e1fbbf52ce478bfabb01 | |
parent | 1f9e4ca1808800d4afb40f8a46caeba46cd405f7 (diff) | |
download | gcc-fb8ffd109a098d6682e0687ee083fa1c3b80d0b4.zip gcc-fb8ffd109a098d6682e0687ee083fa1c3b80d0b4.tar.gz gcc-fb8ffd109a098d6682e0687ee083fa1c3b80d0b4.tar.bz2 |
type_traits (make_signed): Remove specializations for floating point types.
2007-05-08 Benjamin Kosnik <bkoz@redhat.com>
* include/std/type_traits (make_signed): Remove specializations
for floating point types.
(make_unsigned): Same.
* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Fix.
* testsuite/20_util/make_signed/requirements/typedefs-1.cc: Same.
* testsuite/20_util/make_signed/requirements/typedefs-2.cc: Same.
* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same.
* testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Same.
* testsuite/20_util/make_unsigned/requirements/typedefs-2.cc: Same.
From-SVN: r124543
8 files changed, 22 insertions, 61 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index cc9845d..a7f62f9 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,17 @@ 2007-05-08 Benjamin Kosnik <bkoz@redhat.com> + * include/std/type_traits (make_signed): Remove specializations + for floating point types. + (make_unsigned): Same. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Fix. + * testsuite/20_util/make_signed/requirements/typedefs-1.cc: Same. + * testsuite/20_util/make_signed/requirements/typedefs-2.cc: Same. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: Same. + * testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Same. + * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc: Same. + +2007-05-08 Benjamin Kosnik <bkoz@redhat.com> + * testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc: New. 2007-05-08 Jason Merrill <jason@redhat.com> diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 4019188..6806ebc 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -186,21 +186,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) }; template<typename _Tp> - struct __make_unsigned_selector<_Tp, false, true, false> - { - private: - // GNU floating point types start with sizeof int. - static const bool __b1 = sizeof(_Tp) <= sizeof(unsigned int); - static const bool __b2 = sizeof(_Tp) <= sizeof(unsigned long); - typedef conditional<__b2, unsigned long, unsigned long long> __cond; - typedef typename __cond::type __cond_type; - typedef unsigned int __ui_type; - - public: - typedef typename conditional<__b1, __ui_type, __cond_type>::type __type; - }; - - template<typename _Tp> struct __make_unsigned_selector<_Tp, false, false, true> { private: @@ -260,7 +245,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { typedef signed long long __type; }; - // Select between arithmetic and enum: not possible to be both. + // Select between integral and enum: not possible to be both. template<typename _Tp, bool _IsInt = is_integral<_Tp>::value, bool _IsSigned = is_signed<_Tp>::value, @@ -284,20 +269,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) }; template<typename _Tp> - struct __make_signed_selector<_Tp, false, true, false> - { - // GNU floating point types start with sizeof int. - static const bool __b1 = sizeof(_Tp) <= sizeof(signed int); - static const bool __b2 = sizeof(_Tp) <= sizeof(signed long); - typedef conditional<__b2, signed long, signed long long> __cond; - typedef typename __cond::type __cond_type; - typedef unsigned int __i_type; - - public: - typedef typename conditional<__b1, __i_type, __cond_type>::type __type; - }; - - template<typename _Tp> struct __make_signed_selector<_Tp, false, false, true> { private: diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc index 826e47e..43fc33a 100644 --- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc +++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc @@ -50,13 +50,6 @@ void test01() typedef make_signed<volatile wchar_t>::type test23_type; VERIFY( (is_same<test23_type, volatile signed wchar_t>::value) ); -#if 0 - // XXX - // When is_signed works for floating points types this should pass - typedef make_signed<volatile float>::type test24_type; - VERIFY( (is_same<test24_type, volatile int>::value) ); -#endif - typedef make_signed<test_enum>::type test25_type; VERIFY( (is_same<test25_type, int>::value) ); } diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc index 3a820ac..4dd9bb6 100644 --- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc +++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc @@ -50,13 +50,6 @@ void test01() typedef make_signed<volatile wchar_t>::type test23_type; VERIFY( (is_same<test23_type, volatile signed wchar_t>::value) ); -#if 0 - // XXX - // When is_signed works for floating points types this should pass - typedef make_signed<volatile float>::type test24_type; - VERIFY( (is_same<test24_type, volatile int>::value) ); -#endif - typedef make_signed<test_enum>::type test25_type; VERIFY( (is_same<test25_type, short>::value) ); } diff --git a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc index aa94f2a..063c12eb 100644 --- a/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc +++ b/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc @@ -39,15 +39,18 @@ void test01() typedef void (fn_type) (); typedef make_signed<fn_type>::type test4_type; + + typedef make_signed<float>::type test5_type; } // { dg-error "does not name a type" "" { target *-*-* } 34 } // { dg-error "instantiated from here" "" { target *-*-* } 36 } // { dg-error "instantiated from here" "" { target *-*-* } 38 } // { dg-error "instantiated from here" "" { target *-*-* } 41 } +// { dg-error "instantiated from here" "" { target *-*-* } 43 } -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 320 } -// { dg-error "declaration of" "" { target *-*-* } 268 } +// { dg-error "invalid use of incomplete type" "" { target *-*-* } 291 } +// { dg-error "declaration of" "" { target *-*-* } 253 } // { dg-excess-errors "At global scope" } // { dg-excess-errors "In instantiation of" } diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc index b09d3e9..e204c55 100644 --- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc +++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc @@ -50,13 +50,6 @@ void test01() typedef make_unsigned<volatile wchar_t>::type test23_type; VERIFY( (is_same<test23_type, volatile unsigned wchar_t>::value) ); -#if 0 - // XXX - // When is_unsigned works for floating points types this should pass - typedef make_unsigned<volatile float>::type test24_type; - VERIFY( (is_same<test24_type, volatile unsigned int>::value) ); -#endif - typedef make_unsigned<test_enum>::type test25_type; VERIFY( (is_same<test25_type, unsigned int>::value) ); } diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc index 9e5c64a..5038f81 100644 --- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc +++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc @@ -50,13 +50,6 @@ void test01() typedef make_unsigned<volatile wchar_t>::type test23_type; VERIFY( (is_same<test23_type, volatile unsigned wchar_t>::value) ); -#if 0 - // XXX - // When is_unsigned works for floating points types this should pass - typedef make_unsigned<volatile float>::type test24_type; - VERIFY( (is_same<test24_type, volatile unsigned int>::value) ); -#endif - typedef make_unsigned<test_enum>::type test25_type; VERIFY( (is_same<test25_type, unsigned short>::value) ); } diff --git a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc index cc07d61..79277a7 100644 --- a/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc +++ b/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc @@ -39,14 +39,17 @@ void test01() typedef void (fn_type) (); typedef make_unsigned<fn_type>::type test4_type; + + typedef make_unsigned<float>::type test5_type; } // { dg-error "does not name a type" "" { target *-*-* } 34 } // { dg-error "instantiated from here" "" { target *-*-* } 36 } // { dg-error "instantiated from here" "" { target *-*-* } 38 } // { dg-error "instantiated from here" "" { target *-*-* } 41 } +// { dg-error "instantiated from here" "" { target *-*-* } 43 } -// { dg-error "invalid use of incomplete type" "" { target *-*-* } 223 } +// { dg-error "invalid use of incomplete type" "" { target *-*-* } 208 } // { dg-error "declaration of" "" { target *-*-* } 170 } // { dg-excess-errors "At global scope" } |