#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;
}