diff --git a/fmt/format.cc b/fmt/format.cc index 5137feb4..719a556f 100644 --- a/fmt/format.cc +++ b/fmt/format.cc @@ -485,7 +485,7 @@ FMT_FUNC void report_windows_error( FMT_FUNC void vprint(std::FILE *f, CStringRef format_str, format_args args) { MemoryWriter w; - w.write(format_str, args); + w.vwrite(format_str, args); std::fwrite(w.data(), 1, w.size(), f); } diff --git a/fmt/format.h b/fmt/format.h index 27155241..774be47b 100644 --- a/fmt/format.h +++ b/fmt/format.h @@ -2181,14 +2181,6 @@ class BasicFormatter : private internal::FormatterBase { # define FMT_ASSIGN_wchar_t(n) \ arr[n] = fmt::internal::MakeValue< fmt::BasicFormatter >(v##n) -// Defines a variadic function returning void. -# define FMT_VARIADIC_VOID(func, arg_type) \ - template \ - void func(arg_type arg0, const Args & ... args) { \ - auto store = fmt::make_format_args< fmt::BasicFormatter >(args...); \ - func(arg0, fmt::format_args(store)); \ - } - // Defines a variadic constructor. # define FMT_VARIADIC_CTOR(ctor, func, arg0_type, arg1_type) \ template \ @@ -2449,6 +2441,10 @@ class BasicWriter { return std::basic_string(&buffer_[0], buffer_.size()); } + void vwrite(BasicCStringRef format, format_args args) { + BasicFormatter(args, *this).format(format); + } + /** \rst Writes formatted data. @@ -2474,10 +2470,10 @@ class BasicWriter { See also :ref:`syntax`. \endrst */ - void write(BasicCStringRef format, format_args args) { - BasicFormatter(args, *this).format(format); + template + void write(BasicCStringRef format, const Args & ... args) { + vwrite(format, make_format_args>(args...)); } - FMT_VARIADIC_VOID(write, BasicCStringRef) BasicWriter &operator<<(int value) { write_decimal(value); @@ -3134,7 +3130,7 @@ inline void print_colored(Color c, CStringRef format_str, inline std::string vformat(CStringRef format_str, format_args args) { MemoryWriter w; - w.write(format_str, args); + w.vwrite(format_str, args); return w.str(); } @@ -3154,7 +3150,7 @@ inline std::string format(CStringRef format_str, const Args & ... args) { inline std::wstring vformat(WCStringRef format_str, format_args args) { WMemoryWriter w; - w.write(format_str, args); + w.vwrite(format_str, args); return w.str(); } diff --git a/fmt/ostream.cc b/fmt/ostream.cc index 9719d248..8b83b2d1 100644 --- a/fmt/ostream.cc +++ b/fmt/ostream.cc @@ -30,7 +30,7 @@ FMT_FUNC void write(std::ostream &os, Writer &w) { FMT_FUNC void vprint(std::ostream &os, CStringRef format_str, format_args args) { MemoryWriter w; - w.write(format_str, args); + w.vwrite(format_str, args); internal::write(os, w); } } // namespace fmt diff --git a/test/format-test.cc b/test/format-test.cc index e5dcede5..ae01dfe2 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -1566,7 +1566,7 @@ TEST(StrTest, Convert) { std::string vformat_message(int id, const char *format, fmt::format_args args) { MemoryWriter w; w.write("[{}] ", id); - w.write(format, args); + w.vwrite(format, args); return w.str(); } diff --git a/test/macro-test.cc b/test/macro-test.cc index b39fc495..7882e8c5 100644 --- a/test/macro-test.cc +++ b/test/macro-test.cc @@ -74,14 +74,3 @@ int result; } MAKE_TEST(test_func) - -typedef char Char; - -MAKE_TEST(test_variadic_void) -FMT_VARIADIC_VOID(test_variadic_void, const char *) - -TEST(UtilTest, VariadicVoid) { - result = 0; - test_variadic_void("", 10, 20, 30, 40, 50, 60, 70, 80, 90, 100); - EXPECT_EQ(550, result); -}