Workaround a bug in VC++ variadic macro implementation.

This commit is contained in:
Victor Zverovich 2014-06-24 11:09:07 -07:00
parent 302b8f4406
commit a062f94ab0

View File

@ -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