#include <iostream>
#include <memory>
using namespace std;
class foo {
public:
foo():a(new int()) { std::cout << "ctor" << std::endl; }
foo(const foo & x) : a(x.a) { std::cout << "copy" << std::endl; }
foo(foo && x) /*: a(std::move(x.a)) */{ std::cout << "move" << std::endl; }
std::shared_ptr<int> a;
};
int main() {
foo a;
foo b;
std::cout << "a is not null " << !!a.a << std::endl;
auto f = [a = std::move(a), b = std::move(b)] () {cout<<"a.a is not null " <<!!a.a<<endl; };
f();
std::cout << "a is not null " << !!a.a << std::endl;
auto f2(std::move(f));
f();
std::cout << "a is not null " << !!a.a << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgZm9vIHsKcHVibGljOgogICAgZm9vKCk6YShuZXcgaW50KCkpIHsgc3RkOjpjb3V0IDw8ICJjdG9yIiA8PCBzdGQ6OmVuZGw7IH0KICAgIGZvbyhjb25zdCBmb28gJiB4KSA6IGEoeC5hKSB7IHN0ZDo6Y291dCA8PCAiY29weSIgPDwgc3RkOjplbmRsOyB9CiAgICBmb28oZm9vICYmIHgpIC8qOiBhKHN0ZDo6bW92ZSh4LmEpKSAqL3sgc3RkOjpjb3V0IDw8ICJtb3ZlIiA8PCBzdGQ6OmVuZGw7IH0KICAgIHN0ZDo6c2hhcmVkX3B0cjxpbnQ+IGE7Cn07CgppbnQgbWFpbigpIHsKICAgIGZvbyBhOwogICAgZm9vIGI7CiAgICBzdGQ6OmNvdXQgPDwgImEgaXMgbm90IG51bGwgIiA8PCAhIWEuYSA8PCBzdGQ6OmVuZGw7CiAgICBhdXRvIGYgPSBbYSA9IHN0ZDo6bW92ZShhKSwgYiA9IHN0ZDo6bW92ZShiKV0gKCkge2NvdXQ8PCJhLmEgaXMgbm90IG51bGwgIiA8PCEhYS5hPDxlbmRsOyB9OwogICAgZigpOwogICAgc3RkOjpjb3V0IDw8ICJhIGlzIG5vdCBudWxsICIgPDwgISFhLmEgPDwgc3RkOjplbmRsOwogICAgYXV0byBmMihzdGQ6Om1vdmUoZikpOwogICAgZigpOwogICAgc3RkOjpjb3V0IDw8ICJhIGlzIG5vdCBudWxsICIgPDwgISFhLmEgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0=