| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // RUN: %clang_cc1 -std=c++11 %s -Wunused -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;
- };
- };
- }
- };
- }
|