#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 STRINGIFY_1(a) #a
#define STRINGIFY_2(a, b) #a, #b
#define STRINGIFY_3(a, b, c) #a, #b, #c
#define STRINGIFY_4(a, b, c, d) #a, #b, #c, #d
#define STRINGIFY_5(a, b, c, d, e) #a, #b, #c, #d, #e
#define STRINGIFY_6(a, b, c, d, e, f) #a, #b, #c, #d, #e, #f
#define STRINGIFY_7(a, b, c, d, e, f, g) #a, #b, #c, #d, #e, #f, #g
#define STRINGIFY_8(a, b, c, d, e, f, g, h) #a, #b, #c, #d, #e, #f, #g, #h
#define DISPATCH(N) STRINGIFY_ ## N
#define STRINGIFY(...) IDENTITY(APPLY(DISPATCH, COUNT(__VA_ARGS__)))(__VA_ARGS__)
int main() {
const char* words[] = { STRINGIFY(42, 5, toto, hello) };
for (const auto s : words) {
std::cout << s << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2RlZmluZSBDT1VOVF9OKF8xLCBfMiwgXzMsIF80LCBfNSwgXzYsIF83LCBfOCwgXzksIF8xMCwgTiwgLi4uKSAgICBOCiNkZWZpbmUgQ09VTlQoLi4uKSAgIENPVU5UX04oX19WQV9BUkdTX18sIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxKQovLyBXYXJuaW5nOiBDT1VOVCgpIHJldHVybiAxIChhcyBDT1VOVChBKSkgOi0vCgojZGVmaW5lIElERU5USVRZKE4pIE4KI2RlZmluZSBBUFBMWShtYWNybywgLi4uKSBJREVOVElUWShtYWNybyhfX1ZBX0FSR1NfXykpCgojZGVmaW5lIFNUUklOR0lGWV8xKGEpICNhCiNkZWZpbmUgU1RSSU5HSUZZXzIoYSwgYikgI2EsICNiCiNkZWZpbmUgU1RSSU5HSUZZXzMoYSwgYiwgYykgI2EsICNiLCAjYwojZGVmaW5lIFNUUklOR0lGWV80KGEsIGIsIGMsIGQpICNhLCAjYiwgI2MsICNkCiNkZWZpbmUgU1RSSU5HSUZZXzUoYSwgYiwgYywgZCwgZSkgI2EsICNiLCAjYywgI2QsICNlCiNkZWZpbmUgU1RSSU5HSUZZXzYoYSwgYiwgYywgZCwgZSwgZikgI2EsICNiLCAjYywgI2QsICNlLCAjZgojZGVmaW5lIFNUUklOR0lGWV83KGEsIGIsIGMsIGQsIGUsIGYsIGcpICNhLCAjYiwgI2MsICNkLCAjZSwgI2YsICNnCiNkZWZpbmUgU1RSSU5HSUZZXzgoYSwgYiwgYywgZCwgZSwgZiwgZywgaCkgI2EsICNiLCAjYywgI2QsICNlLCAjZiwgI2csICNoCgojZGVmaW5lIERJU1BBVENIKE4pIFNUUklOR0lGWV8gIyMgTgoKI2RlZmluZSBTVFJJTkdJRlkoLi4uKSBJREVOVElUWShBUFBMWShESVNQQVRDSCwgQ09VTlQoX19WQV9BUkdTX18pKSkoX19WQV9BUkdTX18pCgoKaW50IG1haW4oKSB7CiAgICBjb25zdCBjaGFyKiB3b3Jkc1tdID0geyBTVFJJTkdJRlkoNDIsIDUsIHRvdG8sIGhlbGxvKSB9OwogICAgCiAgICBmb3IgKGNvbnN0IGF1dG8gcyA6IHdvcmRzKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IHMgPDwgc3RkOjplbmRsOyAgIAogICAgfQp9Cg==