111
|
1 // { dg-do compile }
|
|
2
|
|
3 #include <tr1/type_traits>
|
|
4
|
|
5 using namespace std::tr1;
|
|
6
|
|
7 enum E1 { };
|
|
8 enum E2 { a = -1, b = 1 };
|
|
9 enum E3 { c = __LONG_MAX__ };
|
|
10
|
|
11 typedef __underlying_type(E1) UTE1;
|
|
12 typedef __underlying_type(E2) UTE2;
|
|
13 typedef __underlying_type(E3) UTE3;
|
|
14
|
|
15 template<typename T>
|
|
16 struct underlying_type
|
|
17 { typedef __underlying_type(T) type; };
|
|
18
|
|
19 int test1[is_same<underlying_type<E1>::type, UTE1>::value ? 1 : -1];
|
|
20 int test2[is_same<underlying_type<E2>::type, UTE2>::value ? 1 : -1];
|
|
21 int test3[is_same<underlying_type<E3>::type, UTE3>::value ? 1 : -1];
|
|
22
|
|
23 int test4[is_integral<underlying_type<E1>::type>::value ? 1 : -1];
|
|
24 int test5[is_integral<underlying_type<E2>::type>::value ? 1 : -1];
|
|
25 int test6[is_integral<underlying_type<E3>::type>::value ? 1 : -1];
|