// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify // RUN: %clang_cc1 -fsyntax-only -std=c++1y %s -verify -DCPP1Y void missing_lambda_declarator() { [](){}(); } template T get(); void infer_void_return_type(int i) { if (i > 17) return []() { }(); if (i > 11) return []() { return; }(); return [](int x) { switch (x) { case 0: return get(); case 1: return; case 2: return { 1, 2.0 }; //expected-error{{cannot deduce}} } }(7); } struct X { }; X infer_X_return_type(X x) { return [&x](int y) { if (y > 0) return X(); else return x; }(5); } X infer_X_return_type_2(X x) { return [x](int y) { if (y > 0) return X(); else return x; // ok even in c++11, per dr1048. }(5); } struct Incomplete; // expected-note 2{{forward declaration of 'Incomplete'}} void test_result_type(int N) { // expected-note {{declared here}} auto l1 = [] () -> Incomplete { }; // expected-error{{incomplete result type 'Incomplete' in lambda expression}} typedef int vla[N]; // expected-warning {{variable length arrays in C++ are a Clang extension}} \ expected-note {{function parameter 'N' with unknown value cannot be used in a constant expression}} auto l2 = [] () -> vla { }; // expected-error{{function cannot return array type 'vla' (aka 'int[N]')}} } template void test_result_type_tpl(int N) { // expected-note 2{{declared here}} auto l1 = []() -> T {}; // expected-error{{incomplete result type 'Incomplete' in lambda expression}} typedef int vla[N]; // expected-warning 2{{variable length arrays in C++ are a Clang extension}} \ expected-note 2{{function parameter 'N' with unknown value cannot be used in a constant expression}} auto l2 = []() -> vla {}; // expected-error{{function cannot return array type 'vla' (aka 'int[N]')}} } void test_result_type_call() { test_result_type_tpl(10); // expected-note {{requested here}} }