diff --git a/include/fmt/format.h b/include/fmt/format.h index f1918a40..d5d65817 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -3216,9 +3216,8 @@ struct formatter< specs_.precision_, specs_.precision_ref, ctx); typedef output_range range_type; - visit(arg_formatter(ctx, specs_), - internal::make_arg(val)); - return ctx.out(); + return visit(arg_formatter(ctx, specs_), + internal::make_arg(val)); } private: diff --git a/test/format-test.cc b/test/format-test.cc index e2d62c30..39855ae8 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -1122,7 +1122,8 @@ class Answer {}; FMT_BEGIN_NAMESPACE template <> struct formatter : formatter { - auto format(Answer, fmt::format_context &ctx) -> decltype(ctx.out()) { + template + auto format(Answer, FormatContext &ctx) -> decltype(ctx.out()) { return formatter::format(42, ctx); } }; @@ -1133,6 +1134,13 @@ TEST(FormatterTest, CustomFormat) { EXPECT_EQ("0042", format("{:04}", Answer())); } +TEST(FormatterTest, CustomFormatTo) { + char buf[10] = {}; + auto end = fmt::format_to(buf, "{}", Answer()); + EXPECT_EQ(end, buf + 2); + EXPECT_STREQ(buf, "42"); +} + TEST(FormatterTest, WideFormatString) { EXPECT_EQ(L"42", format(L"{}", 42)); EXPECT_EQ(L"4.2", format(L"{}", 4.2));