Merge from mainline (157519:158021).
[official-gcc/graphite-test-results.git] / gcc / testsuite / g++.dg / ext / is_pod.C
blob570d23565f13f28438fc8c02a9c0edc1302912be
1 // { dg-options "-std=c++0x" }
2 // { dg-do "run" }
3 #include <cassert>
5 struct A
7   double a;
8   double b;
9 };
11 struct B
13   B() { }
16 struct C
17 : public A { };
19 template<typename T>
20   bool
21   f()
22   { return __is_pod(T); } 
24 template<typename T>
25   class My
26   {
27   public:
28     bool
29     f()
30     { return !!__is_pod(T); }
31   };
33 template<typename T>
34   class My2
35   {
36   public:
37     static const bool trait = __is_pod(T);
38   };
40 template<typename T>
41   const bool My2<T>::trait;
43 template<typename T, bool b = __is_pod(T)>
44   struct My3_help
45   { static const bool trait = b; };
47 template<typename T, bool b>
48   const bool My3_help<T, b>::trait;
50 template<typename T>
51   class My3
52   {
53   public:
54     bool
55     f()
56     { return My3_help<T>::trait; }
57   };
59 #define PTEST(T) (__is_pod(T) && f<T>() \
60                   && My<T>().f() && My2<T>::trait && My3<T>().f())
62 #define NTEST(T) (!__is_pod(T) && !f<T>() \
63                   && !My<T>().f() && !My2<T>::trait && !My3<T>().f())
65 int main()
67   assert (PTEST (int));
68   assert (NTEST (void));
69   assert (PTEST (A));
70   assert (PTEST (A[]));
71   assert (NTEST (B));
72   assert (PTEST (C));
73   assert (PTEST (C[]));
75   return 0;