1 // Positive test for auto 2 // { dg-do run { target c++11 } } 3 4 #include <typeinfo> 5 extern "C" void abort(); 6 7 int f() { return 0; } 8 9 struct A 10 { 11 int i; 12 int f() { return 0; } 13 A operator+(A a) { return a; } 14 }; 15 echoerrnull16template <class T> 17 void g(T t) 18 { 19 auto x = t+t; 20 if (typeid(x) != typeid(t+t)) 21 abort(); 22 23 auto p = new auto(&t); 24 if (typeid(p) != typeid(T**)) 25 abort(); 26 } 27 28 int main() 29 { 30 auto i = 42; 31 if (typeid (i) != typeid (int)) 32 abort(); 33 34 auto *p = &i; 35 if (typeid (p) != typeid (int*)) 36 abort(); 37 38 auto *p2 = &p; 39 if (typeid (p2) != typeid (int**)) 40 abort(); 41 42 auto (*fp)() = f; 43 if (typeid (fp) != typeid (int (*)())) 44 abort(); 45 46 auto A::* pm = &A::i; 47 if (typeid (pm) != typeid (int A::*)) 48 abort(); 49 50 auto (A::*pmf)() = &A::f; 51 if (typeid (pmf) != typeid (int (A::*)())) 52 abort(); 53 54 g(42); 55 g(10.f); 56 g(A()); 57 58 auto *p3 = new auto (i); 59 if (typeid (p3) != typeid (int*)) 60 abort(); 61 62 for (auto idx = i; idx != 0; idx = 0); 63 while (auto idx = 0); 64 if (auto idx = 1); 65 66 switch (auto s = i) 67 { 68 case 42: 69 break; 70 } 71 72 auto j = 42, k = 24; 73 return 0; 74 } 75