#include <vector>
#include <mutex>
using namespace std;
template<typename T>
class monitor
{
mutable mutex m;
mutable T t;
public:
typedef T &ref;
template<typename F>
auto operator*(F f) const -> decltype(f(t))
{
return lock_guard<mutex>(m),
f(t);
}
};
#define MONITOR(mon, z) mon * [&](decltype(mon)::ref z)
int main()
{
monitor<vector<int>> m;
MONITOR(m, x)
{
x.resize(10);
x.push_back(1);
};
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG11dGV4Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgbW9uaXRvcgp7CiAgICBtdXRhYmxlIG11dGV4IG07CiAgICBtdXRhYmxlIFQgdDsKcHVibGljOgogICAgdHlwZWRlZiBUICZyZWY7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPgogICAgYXV0byBvcGVyYXRvciooRiBmKSBjb25zdCAtPiBkZWNsdHlwZShmKHQpKQogICAgewogICAgICAgIHJldHVybiBsb2NrX2d1YXJkPG11dGV4PihtKSwKICAgICAgICAgICAgICAgZih0KTsKICAgIH0KfTsKI2RlZmluZSBNT05JVE9SKG1vbiwgeikgbW9uICogWyZdKGRlY2x0eXBlKG1vbik6OnJlZiB6KQoKaW50IG1haW4oKQp7CiAgICBtb25pdG9yPHZlY3RvcjxpbnQ+PiBtOwogICAgTU9OSVRPUihtLCB4KQogICAgewogICAgICAgIHgucmVzaXplKDEwKTsKICAgICAgICB4LnB1c2hfYmFjaygxKTsKICAgIH07Cn0=