2 // Negative test for auto
4 // { dg-options "-std=c++0x" }
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" }
19 operator auto (); // { dg-error "auto" }
20 operator auto *(); // { dg-error "auto" }
25 operator auto () -> int; // { dg-error "invalid use of" }
26 operator auto *() -> int; // { dg-error "auto" }
29 template <typename> struct B
34 template <typename T> struct C
40 bool d = (auto (A::*)()) 0; // { dg-error "auto" }
45 (auto) { 0 }; // { dg-error "auto" }
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" }
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" }
72 B<auto> b; // { dg-error "auto|invalid" }
73 C<auto> c; // { dg-error "auto|invalid" }
74 C<auto *> c2; // { dg-error "auto|invalid" }
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" }
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" }
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" }
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" }
102 auto fnlate () -> auto; // { dg-error "invalid use of" }
103 auto fnlate2 () -> auto *; // { dg-error "invalid use of|expected" }
106 badthrow () throw (auto) // { dg-error "invalid use of" }
111 badthrow2 () throw (auto &) // { dg-error "invalid use of|expected" }
115 template <auto V = 4> struct G {}; // { dg-error "auto" }
117 template <typename T> struct H { H (); ~H (); };
118 H<auto> h; // { dg-error "invalid" }
120 void qq (auto); // { dg-error "auto" }
121 void qr (auto*); // { dg-error "auto" }
124 typedef auto autot; // { dg-error "auto" }