// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++1y // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 -Wno-c++1y-extensions // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++98 -Wno-c++11-extensions template struct only { only(T); template only(U) = delete; }; void f() { if (auto a = true) { } switch (auto a = 0) { } while (auto a = false) { } for (; auto a = false; ) { } new const auto (0); new (auto) (0.0); int arr[] = {1, 2, 3}; for (auto i : arr) { } } class X { static const auto n = 'x'; auto m = 0; // expected-error {{'auto' not allowed in non-static class member}} }; struct S { static const auto a; // expected-error {{declaration of variable 'a' with deduced type 'const auto' requires an initializer}} static const auto b = 0; static const int c; }; const int S::b; const auto S::c = 0; namespace std { template struct initializer_list { initializer_list(); }; } // In an initializer of the form ( expression-list ), the expression-list // shall be a single assigment-expression. auto parens1(1); auto parens2(2, 3); // expected-error {{initializer for variable 'parens2' with type 'auto' contains multiple expressions}} #if __cplusplus >= 201103L auto parens3({4, 5, 6}); // expected-error {{cannot deduce type for variable 'parens3' with type 'auto' from parenthesized initializer list}} auto parens4 = [p4(1)] {}; auto parens5 = [p5(2, 3)] {}; // expected-error {{initializer for lambda capture 'p5' contains multiple expressions}} auto parens6 = [p6({4, 5, 6})] {}; // expected-error {{cannot deduce type for lambda capture 'p6' from parenthesized initializer list}} #endif #if __cplusplus >= 201402L namespace std_example { // The other half of this example is in p3.cpp auto f() -> int; auto g() { return 0.0; } auto h(); } #endif