diff --git a/format.h b/format.h index dcfde293..179a823e 100644 --- a/format.h +++ b/format.h @@ -2099,31 +2099,32 @@ inline void FormatDec(char *&buffer, T value) { #define FMT_CONCATENATE1(arg1, arg2) FMT_CONCATENATE2(arg1, arg2) #define FMT_CONCATENATE2(arg1, arg2) arg1##arg2 +#define FMT_EXPAND(args) args #define FMT_FOR_EACH_1(func, x, ...) func(x, 1) #define FMT_FOR_EACH_2(func, x, ...) \ - func(x, 2), FMT_FOR_EACH_1(func, __VA_ARGS__) + func(x, 2), FMT_EXPAND(FMT_FOR_EACH_1(func, __VA_ARGS__)) #define FMT_FOR_EACH_3(func, x, ...) \ - func(x, 3), FMT_FOR_EACH_2(func, __VA_ARGS__) + func(x, 3), FMT_EXPAND(FMT_FOR_EACH_2(func, __VA_ARGS__)) #define FMT_FOR_EACH_4(func, x, ...) \ - func(x, 4), FMT_FOR_EACH_3(func, __VA_ARGS__) + func(x, 4), FMT_EXPAND(FMT_FOR_EACH_3(func, __VA_ARGS__)) #define FMT_FOR_EACH_5(func, x, ...) \ - func(x, 5), FMT_FOR_EACH_4(func, __VA_ARGS__) + func(x, 5), FMT_EXPAND(FMT_FOR_EACH_4(func, __VA_ARGS__)) #define FMT_FOR_EACH_6(func, x, ...) \ - func(x, 6), FMT_FOR_EACH_5(func, __VA_ARGS__) + func(x, 6), FMT_EXPAND(FMT_FOR_EACH_5(func, __VA_ARGS__)) #define FMT_FOR_EACH_7(func, x, ...) \ - func(x, 7), FMT_FOR_EACH_6(func, __VA_ARGS__) + func(x, 7), FMT_EXPAND(FMT_FOR_EACH_6(func, __VA_ARGS__)) #define FMT_FOR_EACH_8(func, x, ...) \ - func(x, 8), FMT_FOR_EACH_7(func, __VA_ARGS__) + func(x, 8), FMT_EXPAND(FMT_FOR_EACH_7(func, __VA_ARGS__)) #define FMT_FOR_EACH_NARG(...) FMT_FOR_EACH_NARG_(__VA_ARGS__, FMT_FOR_EACH_RSEQ_N()) -#define FMT_FOR_EACH_NARG_(...) FMT_FOR_EACH_ARG_N(__VA_ARGS__) +#define FMT_FOR_EACH_NARG_(...) FMT_EXPAND(FMT_FOR_EACH_ARG_N(__VA_ARGS__)) #define FMT_FOR_EACH_ARG_N(_1, _2, _3, _4, _5, _6, _7, _8, N, ...) N #define FMT_FOR_EACH_RSEQ_N() 8, 7, 6, 5, 4, 3, 2, 1, 0 #define FMT_FOR_EACH_(N, func, ...) \ FMT_CONCATENATE(FMT_FOR_EACH_, N)(func, __VA_ARGS__) #define FMT_FOR_EACH(func, ...) \ - FMT_FOR_EACH_(FMT_FOR_EACH_NARG(__VA_ARGS__), func, __VA_ARGS__) + FMT_EXPAND(FMT_FOR_EACH_(FMT_FOR_EACH_NARG(__VA_ARGS__), func, __VA_ARGS__)) #define FMT_ADD_ARG_NAME(type, index) type arg##index #define FMT_GET_ARG_NAME(type, index) arg##index