Commit fb8ffd10 by Benjamin Kosnik Committed by Benjamin Kosnik

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
parent 1f9e4ca1
2007-05-08 Benjamin Kosnik <bkoz@redhat.com> 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. * testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc: New.
2007-05-08 Jason Merrill <jason@redhat.com> 2007-05-08 Jason Merrill <jason@redhat.com>
......
...@@ -186,21 +186,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -186,21 +186,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}; };
template<typename _Tp> 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> struct __make_unsigned_selector<_Tp, false, false, true>
{ {
private: private:
...@@ -260,7 +245,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -260,7 +245,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ typedef signed long long __type; }; { 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, template<typename _Tp,
bool _IsInt = is_integral<_Tp>::value, bool _IsInt = is_integral<_Tp>::value,
bool _IsSigned = is_signed<_Tp>::value, bool _IsSigned = is_signed<_Tp>::value,
...@@ -284,20 +269,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -284,20 +269,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}; };
template<typename _Tp> 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> struct __make_signed_selector<_Tp, false, false, true>
{ {
private: private:
......
...@@ -50,13 +50,6 @@ void test01() ...@@ -50,13 +50,6 @@ void test01()
typedef make_signed<volatile wchar_t>::type test23_type; typedef make_signed<volatile wchar_t>::type test23_type;
VERIFY( (is_same<test23_type, volatile signed wchar_t>::value) ); 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; typedef make_signed<test_enum>::type test25_type;
VERIFY( (is_same<test25_type, int>::value) ); VERIFY( (is_same<test25_type, int>::value) );
} }
......
...@@ -50,13 +50,6 @@ void test01() ...@@ -50,13 +50,6 @@ void test01()
typedef make_signed<volatile wchar_t>::type test23_type; typedef make_signed<volatile wchar_t>::type test23_type;
VERIFY( (is_same<test23_type, volatile signed wchar_t>::value) ); 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; typedef make_signed<test_enum>::type test25_type;
VERIFY( (is_same<test25_type, short>::value) ); VERIFY( (is_same<test25_type, short>::value) );
} }
......
...@@ -39,15 +39,18 @@ void test01() ...@@ -39,15 +39,18 @@ void test01()
typedef void (fn_type) (); typedef void (fn_type) ();
typedef make_signed<fn_type>::type test4_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 "does not name a type" "" { target *-*-* } 34 }
// { dg-error "instantiated from here" "" { target *-*-* } 36 } // { dg-error "instantiated from here" "" { target *-*-* } 36 }
// { dg-error "instantiated from here" "" { target *-*-* } 38 } // { dg-error "instantiated from here" "" { target *-*-* } 38 }
// { dg-error "instantiated from here" "" { target *-*-* } 41 } // { 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 "invalid use of incomplete type" "" { target *-*-* } 291 }
// { dg-error "declaration of" "" { target *-*-* } 268 } // { dg-error "declaration of" "" { target *-*-* } 253 }
// { dg-excess-errors "At global scope" } // { dg-excess-errors "At global scope" }
// { dg-excess-errors "In instantiation of" } // { dg-excess-errors "In instantiation of" }
...@@ -50,13 +50,6 @@ void test01() ...@@ -50,13 +50,6 @@ void test01()
typedef make_unsigned<volatile wchar_t>::type test23_type; typedef make_unsigned<volatile wchar_t>::type test23_type;
VERIFY( (is_same<test23_type, volatile unsigned wchar_t>::value) ); 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; typedef make_unsigned<test_enum>::type test25_type;
VERIFY( (is_same<test25_type, unsigned int>::value) ); VERIFY( (is_same<test25_type, unsigned int>::value) );
} }
......
...@@ -50,13 +50,6 @@ void test01() ...@@ -50,13 +50,6 @@ void test01()
typedef make_unsigned<volatile wchar_t>::type test23_type; typedef make_unsigned<volatile wchar_t>::type test23_type;
VERIFY( (is_same<test23_type, volatile unsigned wchar_t>::value) ); 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; typedef make_unsigned<test_enum>::type test25_type;
VERIFY( (is_same<test25_type, unsigned short>::value) ); VERIFY( (is_same<test25_type, unsigned short>::value) );
} }
......
...@@ -39,14 +39,17 @@ void test01() ...@@ -39,14 +39,17 @@ void test01()
typedef void (fn_type) (); typedef void (fn_type) ();
typedef make_unsigned<fn_type>::type test4_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 "does not name a type" "" { target *-*-* } 34 }
// { dg-error "instantiated from here" "" { target *-*-* } 36 } // { dg-error "instantiated from here" "" { target *-*-* } 36 }
// { dg-error "instantiated from here" "" { target *-*-* } 38 } // { dg-error "instantiated from here" "" { target *-*-* } 38 }
// { dg-error "instantiated from here" "" { target *-*-* } 41 } // { 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-error "declaration of" "" { target *-*-* } 170 }
// { dg-excess-errors "At global scope" } // { dg-excess-errors "At global scope" }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment