#include <iostream>
#define COUNT_N(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
#define COUNT(...) COUNT_N(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
// Warning: COUNT() return 1 (as COUNT(A)) :-/
#define IDENTITY(N) N
#define APPLY(macro, ...) IDENTITY(macro(__VA_ARGS__))
#define F_1(_) static_assert(false, "Not enough argument")
#define F_2(a, s) std::string a = s;
#define F_3(a, b, s) std::string a ## _ ## b = s;
#define F_4(a, b, c, s) std::string a ## _ ## b ## _ ## c= s;
#define F_5(a, b, c, d, s) std::string a ## _ ## b ## _ ## c ## _ ## d= s;
#define F_6(a, b, c, d, e, s) std::string a ## _ ## b ## _ ## c ## _ ## d ## _ ## e = s;
#define F_7(a, b, c, d, e, f, s) std::string a ## _ ## b ## _ ## c ## _ ## d ## _ ## e ## _ ## f= s;
#define F_8(a, b, c, d, e, f, g, s) std::string a ## _ ## b ## _ ## c ## _ ## d ## _ ## e ## _ ## f ## _ ## g = s;
#define DISPATCH(N) F_ ## N
#define Macro(...) IDENTITY(APPLY(DISPATCH, COUNT(__VA_ARGS__)))(__VA_ARGS__)
int main() {
Macro(one, name, "hello ")
Macro(one, two, name, "world\n")
std:: cout << one_name << one_two_name;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2RlZmluZSBDT1VOVF9OKF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCwgXzksIF8xMCwgTiwgLi4uKSAgICBOCiNkZWZpbmUgQ09VTlQoLi4uKSAgIENPVU5UX04oX19WQV9BUkdTX18sIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxKQovLyBXYXJuaW5nOiBDT1VOVCgpIHJldHVybiAxIChhcyBDT1VOVChBKSkgOi0vCgojZGVmaW5lIElERU5USVRZKE4pIE4KI2RlZmluZSBBUFBMWShtYWNybywgLi4uKSBJREVOVElUWShtYWNybyhfX1ZBX0FSR1NfXykpCgojZGVmaW5lIEZfMShfKSBzdGF0aWNfYXNzZXJ0KGZhbHNlLCAiTm90IGVub3VnaCBhcmd1bWVudCIpCiNkZWZpbmUgRl8yKGEsIHMpIHN0ZDo6c3RyaW5nIGEgPSBzOwojZGVmaW5lIEZfMyhhLCBiLCBzKSBzdGQ6OnN0cmluZyBhICMjIF8gIyMgYiA9IHM7CiNkZWZpbmUgRl80KGEsIGIsIGMsIHMpIHN0ZDo6c3RyaW5nIGEgIyMgXyAjIyBiICMjIF8gIyMgYz0gczsKI2RlZmluZSBGXzUoYSwgYiwgYywgZCwgcykgc3RkOjpzdHJpbmcgYSAjIyBfICMjIGIgIyMgXyAjIyBjICMjIF8gIyMgZD0gczsKI2RlZmluZSBGXzYoYSwgYiwgYywgZCwgZSwgcykgc3RkOjpzdHJpbmcgYSAjIyBfICMjIGIgIyMgXyAjIyBjICMjIF8gIyMgZCAjIyBfICMjIGUgPSBzOwojZGVmaW5lIEZfNyhhLCBiLCBjLCBkLCBlLCBmLCBzKSBzdGQ6OnN0cmluZyBhICMjIF8gIyMgYiAjIyBfICMjIGMgIyMgXyAjIyBkICMjIF8gIyMgZSAjIyBfICMjIGY9IHM7CiNkZWZpbmUgRl84KGEsIGIsIGMsIGQsIGUsIGYsIGcsIHMpIHN0ZDo6c3RyaW5nIGEgIyMgXyAjIyBiICMjIF8gIyMgYyAjIyBfICMjIGQgIyMgXyAjIyBlICMjIF8gIyMgZiAjIyBfICMjIGcgPSBzOwoKI2RlZmluZSBESVNQQVRDSChOKSBGXyAjIyBOCgojZGVmaW5lIE1hY3JvKC4uLikgSURFTlRJVFkoQVBQTFkoRElTUEFUQ0gsIENPVU5UKF9fVkFfQVJHU19fKSkpKF9fVkFfQVJHU19fKQoKaW50IG1haW4oKSB7CglNYWNybyhvbmUsIG5hbWUsICJoZWxsbyAiKQoJTWFjcm8ob25lLCB0d28sIG5hbWUsICJ3b3JsZFxuIikKCQoJc3RkOjogY291dCA8PCBvbmVfbmFtZSA8PCBvbmVfdHdvX25hbWU7Cn0KCg==