Workaround a bug in VC++ variadic macro implementation.
This commit is contained in:
parent
302b8f4406
commit
a062f94ab0
19
format.h
19
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
|
||||
|
Loading…
Reference in New Issue
Block a user