#include <functional>
#include <iostream>
using namespace std;
struct Holder {
void init() {
callback = [=]() { cout << "In the callback, value == " << value << endl; };
}
void speak() {
cout << "In speak(), value == " << value << endl;
}
function<void()> callback;
string value;
};
int main() {
Holder h;
h.value = "initial";
h.init();
h.value = "updated";
h.callback();
h.speak();
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBIb2xkZXIgewoJCgl2b2lkIGluaXQoKSB7CgkJY2FsbGJhY2sgPSBbPV0oKSB7IGNvdXQgPDwgIkluIHRoZSBjYWxsYmFjaywgdmFsdWUgPT0gIiA8PCB2YWx1ZSA8PCBlbmRsOyB9OwoJfQoJCgl2b2lkIHNwZWFrKCkgewoJCWNvdXQgPDwgIkluIHNwZWFrKCksIHZhbHVlID09ICIgPDwgdmFsdWUgPDwgZW5kbDsKCX0KCQoJZnVuY3Rpb248dm9pZCgpPiBjYWxsYmFjazsKCXN0cmluZyB2YWx1ZTsKfTsKCmludCBtYWluKCkgewoJSG9sZGVyIGg7CgloLnZhbHVlID0gImluaXRpYWwiOwoJaC5pbml0KCk7CgloLnZhbHVlID0gInVwZGF0ZWQiOwoJaC5jYWxsYmFjaygpOwoJaC5zcGVhaygpOwoJcmV0dXJuIDA7Cn0=