1 // RUN: %clang_cc1 -std=c++11 %s -Wunused -verify 2 3 void odr_used() { 4 int i = 17; 5 [i]{}(); 6 } 7 8 struct ReachingThis { 9 static void static_foo() { 10 (void)[this](){}; // expected-error{{'this' cannot be captured in this context}} 11 12 struct Local { 13 int i; 14 15 void bar() { 16 (void)[this](){}; 17 (void)[&](){i = 7; }; 18 } 19 }; 20 } 21 22 void foo() { 23 (void)[this](){}; 24 25 struct Local { 26 int i; 27 28 static void static_bar() { 29 (void)[this](){}; // expected-error{{'this' cannot be captured in this context}} 30 (void)[&](){i = 7; }; // expected-error{{invalid use of member 'i' in static member function}} 31 } 32 }; 33 } 34 }; 35 36 void immediately_enclosing(int i) { // expected-note{{'i' declared here}} 37 [i]() { 38 [i] {}(); 39 }(); 40 41 [=]() { 42 [i] {}(); 43 }(); 44 45 []() { // expected-note{{lambda expression begins here}} 46 [i] {}(); // expected-error{{variable 'i' cannot be implicitly captured in a lambda with no capture-default specified}} 47 }(); 48 } 49 50 void f1(int i) { // expected-note{{declared here}} 51 int const N = 20; 52 auto m1 = [=]{ 53 int const M = 30; 54 auto m2 = [i]{ 55 int x[N][M]; 56 x[0][0] = i; 57 }; 58 (void)N; 59 (void)M; 60 (void)m2; 61 }; 62 struct s1 { 63 int f; 64 void work(int n) { // expected-note{{declared here}} 65 int m = n*n; 66 int j = 40; // expected-note{{declared here}} 67 auto m3 = [this,m] { // expected-note 3{{lambda expression begins here}} 68 auto m4 = [&,j] { // expected-error{{variable 'j' cannot be implicitly captured in a lambda with no capture-default specified}} 69 int x = n; // expected-error{{variable 'n' cannot be implicitly captured in a lambda with no capture-default specified}} 70 x += m; 71 x += i; // expected-error{{variable 'i' cannot be implicitly captured in a lambda with no capture-default specified}} 72 x += f; 73 }; 74 }; 75 } 76 }; 77 } 78