// RUN: %clang_cc1 -std=c++11 %s -Wunused -Wno-unused-lambda-capture -verify void odr_used() { int i = 17; [i]{}(); } struct ReachingThis { static void static_foo() { (void)[this](){}; // expected-error{{'this' cannot be captured in this context}} struct Local { int i; void bar() { (void)[this](){}; (void)[&](){i = 7; }; } }; } void foo() { (void)[this](){}; struct Local { int i; static void static_bar() { (void)[this](){}; // expected-error{{'this' cannot be captured in this context}} (void)[&](){i = 7; }; // expected-error{{invalid use of member 'i' in static member function}} } }; } }; void immediately_enclosing(int i) { // expected-note{{'i' declared here}} [i]() { [i] {}(); }(); [=]() { [i] {}(); }(); []() { // expected-note{{lambda expression begins here}} [i] {}(); // expected-error{{variable 'i' cannot be implicitly captured in a lambda with no capture-default specified}} }(); } void f1(int i) { // expected-note{{declared here}} int const N = 20; auto m1 = [=]{ int const M = 30; auto m2 = [i]{ int x[N][M]; x[0][0] = i; }; (void)N; (void)M; (void)m2; }; struct s1 { int f; void work(int n) { // expected-note{{declared here}} int m = n*n; int j = 40; // expected-note{{declared here}} auto m3 = [this,m] { // expected-note 3{{lambda expression begins here}} auto m4 = [&,j] { // expected-error{{variable 'j' cannot be implicitly captured in a lambda with no capture-default specified}} int x = n; // expected-error{{variable 'n' cannot be implicitly captured in a lambda with no capture-default specified}} x += m; x += i; // expected-error{{variable 'i' cannot be implicitly captured in a lambda with no capture-default specified}} x += f; }; }; } }; }