// Positive test for auto // { dg-do run } // { dg-options "-std=c++0x" } #include extern "C" void abort(); int f() {} struct A { int i; int f() {} A operator+(A a) { return a; } }; template void g(T t) { auto x = t+t; if (typeid(x) != typeid(t+t)) abort(); auto p = new auto(&t); if (typeid(p) != typeid(T**)) abort(); } int main() { auto i = 42; if (typeid (i) != typeid (int)) abort(); auto *p = &i; if (typeid (p) != typeid (int*)) abort(); auto *p2 = &p; if (typeid (p2) != typeid (int**)) abort(); auto (*fp)() = f; if (typeid (fp) != typeid (int (*)())) abort(); auto A::* pm = &A::i; if (typeid (pm) != typeid (int A::*)) abort(); auto (A::*pmf)() = &A::f; if (typeid (pmf) != typeid (int (A::*)())) abort(); g(42); g(10.f); g(A()); auto *p3 = new auto (i); if (typeid (p3) != typeid (int*)) abort(); for (auto idx = i; idx != 0; idx = 0); while (auto idx = 0); if (auto idx = 1); switch (auto s = i) { case 42: break; } auto j = 42, k = 24; }