OSDN Git Service

PR c++/50941
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / cpp0x / auto9.C
1 // PR c++/37962
2 // Negative test for auto
3 // { dg-do compile }
4 // { dg-options "-std=c++0x" }
5
6 #include <typeinfo>
7 #include <stdarg.h>
8 #include <stddef.h>
9
10 int i = *(auto *) 0;                            // { dg-error "auto" }
11 struct A *p = (auto *) 0;                       // { dg-error "auto" }
12 int *q = static_cast <auto *>(0);               // { dg-error "auto" }
13 const int *r = const_cast <auto *>(q);          // { dg-error "auto" }
14 const std::type_info &t1 = typeid (auto);       // { dg-error "auto" }
15 const std::type_info &t2 = typeid (auto *);     // { dg-error "auto" }
16
17 struct A
18 {
19   operator auto ();                             // { dg-error "auto" }
20   operator auto *();                            // { dg-error "auto" }
21 };
22
23 struct A2
24 {
25   operator auto () -> int;                      // { dg-error "invalid use of" }
26   operator auto *() -> int;                     // { dg-error "auto" }
27 };
28
29 template <typename> struct B
30 {
31   enum { e };
32 };
33
34 template <typename T> struct C
35 {
36   C () : i () {}
37   int i;
38 };
39
40 bool d = (auto (A::*)()) 0;                     // { dg-error "auto" }
41
42 void
43 foo ()
44 {
45   (auto) { 0 };                                 // { dg-error "auto" }
46   C<int> c;
47   dynamic_cast<auto> (c);                       // { dg-error "auto" }
48   reinterpret_cast<auto> (c);                   // { dg-error "auto" }
49   int i = auto (0);                             // { dg-error "auto" }
50   auto p1 = new (auto);                         // { dg-error "auto" }
51   auto p2 = new (auto) (42);                    // { dg-error "invalid use of|deduce" }
52   offsetof (auto, fld);                         // { dg-error "auto" }
53   offsetof (auto *, fld);                       // { dg-error "auto" }
54   sizeof (auto);                                // { dg-error "auto" }
55   sizeof (auto *);                              // { dg-error "auto" }
56 }
57
58 void
59 foo2 (void)
60 {
61   __alignof__ (auto);                           // { dg-error "auto" }
62   __alignof__ (auto *);                         // { dg-error "auto" }
63   __typeof__ (auto) v1;                         // { dg-error "auto" }
64   __typeof__ (auto *) v2;                       // { dg-error "auto" }
65   __is_class (auto);                            // { dg-error "auto|expected" }
66   __is_pod (auto *);                            // { dg-error "auto|expected" }
67   __is_base_of (int, auto);                     // { dg-error "auto|expected" }
68   __is_base_of (auto, int);                     // { dg-error "auto|expected" }
69   __is_base_of (auto, auto *);                  // { dg-error "auto|expected" }
70 }
71
72 B<auto> b;                                      // { dg-error "auto|invalid" }
73 C<auto> c;                                      // { dg-error "auto|invalid" }
74 C<auto *> c2;                                   // { dg-error "auto|invalid" }
75
76 enum : auto { EE = 0 };                         // { dg-error "must be an integral type" }
77 enum struct D : auto * { FF = 0 };              // { dg-error "must be an integral type|declar|expected" }
78
79 void
80 bar ()
81 {
82   try { } catch (auto i) { }                    // { dg-error "parameter declared" }
83   try { } catch (auto) { }                      // { dg-error "parameter declared" }
84   try { } catch (auto *i) { }                   // { dg-error "parameter declared" }
85   try { } catch (auto *) { }                    // { dg-error "parameter declared" }
86 }
87
88 void
89 baz (int i, ...)
90 {
91   va_list ap;
92   va_start (ap, i);
93   va_arg (ap, auto);                            // { dg-error "invalid use of" }
94   va_arg (ap, auto *);                          // { dg-error "invalid use of|expected" }
95   va_arg (ap, auto &);                          // { dg-error "invalid use of|expected" }
96   va_end (ap);
97 }
98
99 template <typename T = auto> struct E {};       // { dg-error "invalid use of" }
100 template <class T = auto *> struct F {};        // { dg-error "invalid use of|expected" }
101
102 auto fnlate () -> auto;                         // { dg-error "invalid use of" }
103 auto fnlate2 () -> auto *;                      // { dg-error "invalid use of|expected" }
104
105 void
106 badthrow () throw (auto)                        // { dg-error "invalid use of" }
107 {
108 }
109
110 void
111 badthrow2 () throw (auto &)                     // { dg-error "invalid use of|expected" }
112 {
113 }
114
115 template <auto V = 4> struct G {};              // { dg-error "auto" }
116
117 template <typename T> struct H { H (); ~H (); };
118 H<auto> h;                                      // { dg-error "invalid" }
119
120 void qq (auto);                 // { dg-error "auto" }
121 void qr (auto*);                // { dg-error "auto" }
122
123 // PR c++/46145
124 typedef auto autot;             // { dg-error "auto" }