#include <iostream>
#include <functional>
class DoAction
{
public:
DoAction (std::function<void ()> func) : m_func (func)
{
}
~DoAction ()
{
m_func ();
}
private:
std::function<void ()> m_func;
};
int main()
{
int a = 5;
{
std::cout << a << '\n';
DoAction action([&] {a++;});
std::cout << a << '\n';
}
std::cout << a << '\n';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCgljbGFzcyBEb0FjdGlvbgoJCXsKCXB1YmxpYzoKCQlEb0FjdGlvbiAoc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jKSA6IG1fZnVuYyAoZnVuYykKCQkJewoJCQl9CgkJfkRvQWN0aW9uICgpCgkJCXsKCQkJbV9mdW5jICgpOwoJCQl9CgkJCQoJcHJpdmF0ZToKCQlzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fZnVuYzsKCQl9OwoKCWludCBtYWluKCkKCQl7CgkJaW50IGEgPSA1OwoJCQl7CgkJCXN0ZDo6Y291dCA8PCBhIDw8ICdcbic7CgkJCURvQWN0aW9uIGFjdGlvbihbJl0ge2ErKzt9KTsKCQkJc3RkOjpjb3V0IDw8IGEgPDwgJ1xuJzsKCQkJfQoJCXN0ZDo6Y291dCA8PCBhIDw8ICdcbic7CgkJcmV0dXJuIDA7CgkJfQ==