#include <functional>
struct lols {
std::function<void()> mem;
template<typename T> lols(T&& t)
: mem(t) {}
lols(lols&& other) { mem.swap(other.mem); }
~lols() { if (mem) mem(); }
};
template<typename T> lols finally(T&& t) {
return lols { std::forward<T>(t) };
}
#include <iostream>
int print(int i)
{
std::cout << i << ' ';
return i;
}
int main() {
auto f = finally([] { print(13); });
return print(0);
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CgpzdHJ1Y3QgbG9scyB7CiAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbWVtOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gbG9scyhUJiYgdCkKICAgIDogbWVtKHQpIHt9CiAgICBsb2xzKGxvbHMmJiBvdGhlcikgeyBtZW0uc3dhcChvdGhlci5tZW0pOyB9CiAgICB+bG9scygpIHsgaWYgKG1lbSkgbWVtKCk7IH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGxvbHMgZmluYWxseShUJiYgdCkgewogICAgcmV0dXJuIGxvbHMgeyBzdGQ6OmZvcndhcmQ8VD4odCkgfTsKfQoKI2luY2x1ZGUgPGlvc3RyZWFtPgppbnQgcHJpbnQoaW50IGkpCnsKICAgIHN0ZDo6Y291dCA8PCBpIDw8ICcgJzsgCiAgICByZXR1cm4gaTsKfQoKaW50IG1haW4oKSB7CiAgICBhdXRvIGYgPSBmaW5hbGx5KFtdIHsgcHJpbnQoMTMpOyB9KTsKICAgIHJldHVybiBwcmludCgwKTsKfQ==