Rebase.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / lambda / lambda-nested.C
blobc8ea46a980fe8ffb8fdd7301d8e9d50fb68323b8
1 // { dg-do run { target c++11 } }
3 #include <cassert>
5 struct A {
6   int i;
7   A(): i(42) { }
8   int f() {
9     return [this]{
10       return [=]{ return i; }();
11     }();
12   }
15 int main() {
16   int i = 1;
18   [] (int& i) -> void {
19     [&] () -> void {
20       i = 2;
21     } ();
22   } (i);
24   assert(i == 2);
26   [&] () -> void {
27     [&i] () -> void {
28       i = 3;
29     } ();
30   } ();
32   assert(i == 3);
34   [&] () -> void {
35     [&] () -> void {
36       i = 4;
37     } ();
38   } ();
40   assert(i == 4);
41   i = 4;
43   [&] () -> void {
44     [=] () mutable -> void {
45       i = 5;
46     } ();
47   } ();
49   assert(i == 4);
51   [=] () mutable -> void {
52     [&] () -> void {
53       i = 6;
54     } ();
55   } ();
57   assert(i == 4);
59   assert (A().f() == 42);
61   return 0;