// RUN: %clang_cc1 -std=c++23 %s -verify // RUN: %clang_cc1 -std=c++20 %s -verify auto L0 = []<> { }; //expected-error {{cannot be empty}} auto L1 = [] { }; auto L2 = [](T1 arg1, T2 arg2) -> T1 { }; auto L3 = [](auto arg) { T t; }; auto L4 = []() { }; // http://llvm.org/PR49736 auto L5 = [](){}; auto L6 = []{}; auto L7 = []() noexcept {}; auto L8 = [] noexcept {}; #if __cplusplus <= 202002L // expected-warning@-2 {{lambda without a parameter clause is a C++23 extension}} #endif auto L9 = [] requires true {}; auto L10 = [] requires true(){}; auto L11 = [] requires true() noexcept {}; auto L12 = [] requires true noexcept {}; #if __cplusplus <= 202002L // expected-warning@-2 {{is a C++23 extension}} #endif auto L13 = []() noexcept requires true {}; auto L14 = [] requires true() noexcept requires true {}; auto XL0 = [] noexcept requires true {}; // expected-error {{expected body of lambda expression}} auto XL1 = [] requires true noexcept requires true {}; // expected-error {{expected body}} #if __cplusplus <= 202002L // expected-warning@-3 {{is a C++23 extension}} // expected-warning@-3 {{is a C++23 extension}} #endif namespace GH64962 { void f() { [] (T i) -> int[] // expected-error {{function cannot return array type 'int[]'}} // extension-warning {{explicit template parameter list for lambdas is a C++20 extension}} { return 3; } (v); // expected-error {{use of undeclared identifier 'v'}} } }