mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-24 21:16:56 +00:00
Add FMT_VARIADIC_VOID to emulate variadic functions on old compilers.
This commit is contained in:
parent
8198df84f0
commit
2f752abe97
32
format.h
32
format.h
@ -864,6 +864,35 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// Generates a comma-separated list by applying f to numbers 1..n.
|
||||
#define FMT_GEN(n, f) FMT_GEN##n(f)
|
||||
#define FMT_GEN1(f) f(1)
|
||||
#define FMT_GEN2(f) FMT_GEN1(f), f(2)
|
||||
#define FMT_GEN3(f) FMT_GEN2(f), f(3)
|
||||
#define FMT_GEN4(f) FMT_GEN3(f), f(4)
|
||||
#define FMT_GEN5(f) FMT_GEN4(f), f(5)
|
||||
#define FMT_GEN6(f) FMT_GEN5(f), f(6)
|
||||
#define FMT_GEN7(f) FMT_GEN6(f), f(7)
|
||||
#define FMT_GEN8(f) FMT_GEN7(f), f(8)
|
||||
#define FMT_GEN9(f) FMT_GEN8(f), f(9)
|
||||
|
||||
#define FMT_MAKE_TEMPLATE_ARG(n) typename T##n
|
||||
#define FMT_MAKE_ARG(n) const T##n &v##n
|
||||
#define FMT_MAKE_REF(n) MakeArg(v##n)
|
||||
|
||||
#define FMT_TEMPLATE(func_name, n) \
|
||||
template <FMT_GEN(n, FMT_MAKE_TEMPLATE_ARG)> \
|
||||
inline void func_name(BasicStringRef<Char> format, FMT_GEN(n, FMT_MAKE_ARG)) { \
|
||||
const fmt::internal::ArgInfo args[] = {FMT_GEN(n, FMT_MAKE_REF)}; \
|
||||
func_name(format, fmt::ArgList(args, sizeof(args) / sizeof(*args))); \
|
||||
}
|
||||
|
||||
// Defines a variadic function returning void.
|
||||
#define FMT_VARIADIC_VOID(func_name) \
|
||||
FMT_TEMPLATE(format, 1) FMT_TEMPLATE(format, 2) FMT_TEMPLATE(format, 3) \
|
||||
FMT_TEMPLATE(format, 4) FMT_TEMPLATE(format, 5) FMT_TEMPLATE(format, 6) \
|
||||
FMT_TEMPLATE(format, 7) FMT_TEMPLATE(format, 8) FMT_TEMPLATE(format, 9)
|
||||
|
||||
/**
|
||||
\rst
|
||||
This template provides operations for formatting and writing data into
|
||||
@ -1249,6 +1278,9 @@ class BasicWriter {
|
||||
BasicArg<> arg_array[internal::NonZero<sizeof...(Args)>::VALUE] = {args...};
|
||||
this->printf(format, ArgList(arg_array, sizeof...(Args)));
|
||||
}
|
||||
|
||||
#else
|
||||
FMT_VARIADIC_VOID(format)
|
||||
#endif
|
||||
|
||||
template <typename T>
|
||||
|
Loading…
Reference in New Issue
Block a user