#include struct myclass { int classattr; myclass() : classattr(8888) { } void test() { int localvar= 9999; printf("localvar= %p %d\n", &localvar, localvar); printf("this= %p\n", this); printf("classattr= %p %d\n", &classattr, classattr); printf("calling [localvar, this]\n"); calllambda( 1234, [localvar, this](int x) { auto tthis= this; auto llocalvar= localvar; printf("x= %p %d\n", &x, x); printf("localvar= %p %d\n", &localvar, localvar); printf("this= %p\n", this); printf("classattr= %p %d\n", &classattr, classattr); printf("...calling [localvar, this]\n"); this->calllambda( 4321, [llocalvar, tthis,x](int y) { printf("x= %p %d\n", &x, x); printf("y= %p %d\n", &y, y); printf("llocalvar= %p %d\n", &llocalvar, llocalvar); printf("this= %p\n", tthis); printf("classattr= %p %d\n", &tthis->classattr, tthis->classattr); } ); printf("...calling [=]\n"); this->calllambda( 4321, [=](int y) { printf("x= %p %d\n", &x, x); printf("y= %p %d\n", &y, y); printf("localvar= %p %d\n", &localvar, localvar); printf("this= %p\n", tthis); printf("classattr= %p %d\n", &classattr, classattr); } ); // printf("...calling [&]\n"); // this->calllambda( 4321, // [&](int y) { // printf("x= %p %d\n", &x, x); // printf("y= %p %d\n", &y, y); // printf("localvar= %p %d\n", &localvar, localvar); // printf("this= %p\n", tthis); // printf("classattr= %p %d\n", &classattr, classattr); // } // ); } ); printf("calling [=]\n"); calllambda( 1234, [=](int x) { auto tthis= this; auto llocalvar= localvar; printf("x= %p %d\n", &x, x); printf("localvar= %p %d\n", &localvar, localvar); printf("this= %p\n", this); printf("classattr= %p %d\n", &classattr, classattr); printf("...calling [localvar, this]\n"); this->calllambda( 4321, [llocalvar, tthis, x](int y) { printf("x= %p %d\n", &x, x); printf("y= %p %d\n", &y, y); printf("llocalvar= %p %d\n", &llocalvar, llocalvar); printf("this= %p\n", tthis); printf("classattr= %p %d\n", &tthis->classattr, tthis->classattr); } ); printf("...calling [=]\n"); this->calllambda( 4321, [=](int y) { printf("x= %p %d\n", &x, x); printf("y= %p %d\n", &y, y); printf("localvar= %p %d\n", &localvar, localvar); printf("this= %p\n", tthis); printf("classattr= %p %d\n", &classattr, classattr); } ); // printf("...calling [&]\n"); // this->calllambda( 4321, // [&](int y) { // printf("x= %p %d\n", &x, x); // printf("y= %p %d\n", &y, y); // printf("localvar= %p %d\n", &localvar, localvar); // printf("this= %p\n", tthis); // printf("classattr= %p %d\n", &classattr, classattr); // } // ); } ); printf("calling [&]\n"); calllambda( 1234, [&](int x) { auto tthis= this; auto llocalvar= localvar; printf("x= %p %d\n", &x, x); printf("localvar= %p %d\n", &localvar, localvar); printf("this= %p\n", this); printf("classattr= %p %d\n", &classattr, classattr); printf("...calling [localvar, this]\n"); this->calllambda( 4321, [llocalvar, tthis, x](int y) { printf("x= %p %d\n", &x, x); printf("y= %p %d\n", &y, y); printf("llocalvar= %p %d\n", &llocalvar, llocalvar); printf("this= %p\n", tthis); printf("classattr= %p %d\n", &tthis->classattr, tthis->classattr); } ); printf("...calling [=]\n"); this->calllambda( 4321, [=](int y) { printf("x= %p %d\n", &x, x); printf("y= %p %d\n", &y, y); printf("localvar= %p %d\n", &localvar, localvar); printf("this= %p\n", tthis); printf("classattr= %p %d\n", &classattr, classattr); } ); printf("...calling [&]\n"); this->calllambda( 4321, [&](int y) { printf("x= %p %d\n", &x, x); printf("y= %p %d\n", &y, y); printf("localvar= %p %d\n", &localvar, localvar); printf("this= %p\n", tthis); printf("classattr= %p %d\n", &classattr, classattr); } ); } ); } template void calllambda(int x, F f) { f(x); } }; int main(int,char**) { myclass mc; mc.test(); }