#include <iostream>
template<typename functor>
struct finalizer
{
finalizer(functor f) : f_(f) {}
~finalizer() {
f_();
}
functor f_;
};
template<typename functor>
finalizer<functor> finally(functor&& f)
{
return finalizer<functor>(f);
}
int main()
{
int a = 0;
{
auto scope_exit = finally([&](){
a++;
});
std::cout << a << std::endl;
}
std::cout << a << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgZnVuY3Rvcj4Kc3RydWN0IGZpbmFsaXplcgp7CglmaW5hbGl6ZXIoZnVuY3RvciBmKSA6IGZfKGYpIHt9Cgl+ZmluYWxpemVyKCkgewoJCWZfKCk7Cgl9CgoJZnVuY3RvciBmXzsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIGZ1bmN0b3I+CmZpbmFsaXplcjxmdW5jdG9yPiBmaW5hbGx5KGZ1bmN0b3ImJiBmKQp7CglyZXR1cm4gZmluYWxpemVyPGZ1bmN0b3I+KGYpOwp9CgppbnQgbWFpbigpCnsKCWludCBhID0gMDsKCXsKCQlhdXRvIHNjb3BlX2V4aXQgPSBmaW5hbGx5KFsmXSgpewoJCQlhKys7CgkJfSk7CgkJc3RkOjpjb3V0IDw8IGEgPDwgc3RkOjplbmRsOwoJfQoJc3RkOjpjb3V0IDw8IGEgPDwgc3RkOjplbmRsOwp9