// Testcase from N2998 // { dg-do compile { target c++11 } } void f1(int i) { int const N = 20; auto m1 = [=]{ int const M = 30; auto m2 = [i]{ int x[N][M]; // OK: N and M are not "used" x[0][0] = i; // OK: i is explicitly captured by m2 // and implicitly captured by m1 }; }; struct s1 { int f; int work(int n) { int m = n*n; int j = 40; auto m3 = [this,m]{ /*auto m4=*/[&,j]{ // { dg-error "j. is not captured" } int x = n; // { dg-error "n. is not captured" } x += m; // OK: m implicitly captured by m4 // and explicitly captured by m3 x += i; // { dg-error "i. is not captured" } x += f; // OK: this captured implicitly by m4 // and explicitly by m3 }; }; } }; }