#define CONCATENATE(arg1, arg2) CONCATENATE1(arg1, arg2)
#define CONCATENATE1(arg1, arg2) CONCATENATE2(arg1, arg2)
#define CONCATENATE2(arg1, arg2) arg1##arg2
#define FOR_EACH_1(what, arg, x) what(arg, x)
#define FOR_EACH_2(what, arg, x, ...) what(arg, x) FOR_EACH_1(what, arg, __VA_ARGS__);
#define FOR_EACH_3(what, arg, x, ...) what(arg, x) FOR_EACH_2(what, arg, __VA_ARGS__);
#define FOR_EACH_4(what, arg, x, ...) what(arg, x) FOR_EACH_3(what, arg, __VA_ARGS__);
#define FOR_EACH_5(what, arg, x, ...) what(arg, x) FOR_EACH_4(what, arg, __VA_ARGS__);
#define FOR_EACH_6(what, arg, x, ...) what(arg, x) FOR_EACH_5(what, arg, __VA_ARGS__);
#define FOR_EACH_7(what, arg, x, ...) what(arg, x) FOR_EACH_6(what, arg, __VA_ARGS__);
#define FOR_EACH_8(what, arg, x, ...) what(arg, x) FOR_EACH_7(what, arg, __VA_ARGS__);
#define FOR_EACH_NARG(...) FOR_EACH_NARG_(__VA_ARGS__, FOR_EACH_RSEQ_N())
#define FOR_EACH_NARG_(...) FOR_EACH_ARG_N(__VA_ARGS__)
#define FOR_EACH_ARG_N(_1, _2, _3, _4, _5, _6, _7, _8, N, ...) N
#define FOR_EACH_RSEQ_N() 8, 7, 6, 5, 4, 3, 2, 1, 0
#define FOR_EACH_(N, what, arg, x, ...) CONCATENATE(FOR_EACH_, N)(what, arg, x, __VA_ARGS__)
#define FOR_EACH(what, arg, x, ...) FOR_EACH_(FOR_EACH_NARG(x, __VA_ARGS__), what, arg, x, __VA_ARGS__)
#define DO_WITH(var,action) var.action;
#define WITH(var, ...) ([&]{ FOR_EACH(DO_WITH, var, __VA_ARGS__) }())
#include <cstdio>
#include <vector>
int main()
{
std::vector<int> v;
WITH(v,
push_back(1),
push_back(2),
resize(5,3));
for (int i : v) printf("%d\n", i);
}
I2RlZmluZSBDT05DQVRFTkFURShhcmcxLCBhcmcyKSAgQ09OQ0FURU5BVEUxKGFyZzEsIGFyZzIpCiNkZWZpbmUgQ09OQ0FURU5BVEUxKGFyZzEsIGFyZzIpIENPTkNBVEVOQVRFMihhcmcxLCBhcmcyKQojZGVmaW5lIENPTkNBVEVOQVRFMihhcmcxLCBhcmcyKSBhcmcxIyNhcmcyCgojZGVmaW5lIEZPUl9FQUNIXzEod2hhdCwgYXJnLCB4KSB3aGF0KGFyZywgeCkKI2RlZmluZSBGT1JfRUFDSF8yKHdoYXQsIGFyZywgeCwgLi4uKSB3aGF0KGFyZywgeCkgRk9SX0VBQ0hfMSh3aGF0LCBhcmcsIF9fVkFfQVJHU19fKTsKI2RlZmluZSBGT1JfRUFDSF8zKHdoYXQsIGFyZywgeCwgLi4uKSB3aGF0KGFyZywgeCkgRk9SX0VBQ0hfMih3aGF0LCBhcmcsIF9fVkFfQVJHU19fKTsKI2RlZmluZSBGT1JfRUFDSF80KHdoYXQsIGFyZywgeCwgLi4uKSB3aGF0KGFyZywgeCkgRk9SX0VBQ0hfMyh3aGF0LCBhcmcsIF9fVkFfQVJHU19fKTsKI2RlZmluZSBGT1JfRUFDSF81KHdoYXQsIGFyZywgeCwgLi4uKSB3aGF0KGFyZywgeCkgRk9SX0VBQ0hfNCh3aGF0LCBhcmcsIF9fVkFfQVJHU19fKTsKI2RlZmluZSBGT1JfRUFDSF82KHdoYXQsIGFyZywgeCwgLi4uKSB3aGF0KGFyZywgeCkgRk9SX0VBQ0hfNSh3aGF0LCBhcmcsIF9fVkFfQVJHU19fKTsKI2RlZmluZSBGT1JfRUFDSF83KHdoYXQsIGFyZywgeCwgLi4uKSB3aGF0KGFyZywgeCkgRk9SX0VBQ0hfNih3aGF0LCBhcmcsIF9fVkFfQVJHU19fKTsKI2RlZmluZSBGT1JfRUFDSF84KHdoYXQsIGFyZywgeCwgLi4uKSB3aGF0KGFyZywgeCkgRk9SX0VBQ0hfNyh3aGF0LCBhcmcsIF9fVkFfQVJHU19fKTsKCiNkZWZpbmUgRk9SX0VBQ0hfTkFSRyguLi4pIEZPUl9FQUNIX05BUkdfKF9fVkFfQVJHU19fLCBGT1JfRUFDSF9SU0VRX04oKSkKI2RlZmluZSBGT1JfRUFDSF9OQVJHXyguLi4pIEZPUl9FQUNIX0FSR19OKF9fVkFfQVJHU19fKSAKI2RlZmluZSBGT1JfRUFDSF9BUkdfTihfMSwgXzIsIF8zLCBfNCwgXzUsIF82LCBfNywgXzgsIE4sIC4uLikgTiAKI2RlZmluZSBGT1JfRUFDSF9SU0VRX04oKSA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwCgojZGVmaW5lIEZPUl9FQUNIXyhOLCB3aGF0LCBhcmcsIHgsIC4uLikgQ09OQ0FURU5BVEUoRk9SX0VBQ0hfLCBOKSh3aGF0LCBhcmcsIHgsIF9fVkFfQVJHU19fKQojZGVmaW5lIEZPUl9FQUNIKHdoYXQsIGFyZywgeCwgLi4uKSBGT1JfRUFDSF8oRk9SX0VBQ0hfTkFSRyh4LCBfX1ZBX0FSR1NfXyksIHdoYXQsIGFyZywgeCwgX19WQV9BUkdTX18pCgojZGVmaW5lIERPX1dJVEgodmFyLGFjdGlvbikgdmFyLmFjdGlvbjsKI2RlZmluZSBXSVRIKHZhciwgLi4uKSAoWyZdeyBGT1JfRUFDSChET19XSVRILCB2YXIsIF9fVkFfQVJHU19fKSB9KCkpCgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgoKaW50IG1haW4oKQp7CiAgc3RkOjp2ZWN0b3I8aW50PiB2OwogIFdJVEgodiwKICAgICAgIHB1c2hfYmFjaygxKSwKICAgICAgIHB1c2hfYmFjaygyKSwKICAgICAgIHJlc2l6ZSg1LDMpKTsKICBmb3IgKGludCBpIDogdikgcHJpbnRmKCIlZFxuIiwgaSk7Cn0K