diff --git a/include/fmt/compile.h b/include/fmt/compile.h index 4d8caa32..13406ce2 100644 --- a/include/fmt/compile.h +++ b/include/fmt/compile.h @@ -444,7 +444,8 @@ template struct spec_field { OutputIt format(OutputIt out, const Args&... args) const { // This ensures that the argument type is convertile to `const T&`. const T& arg = get(args...); - const auto& vargs = make_format_args(args...); + const auto& vargs = + make_format_args>(args...); basic_format_context ctx(out, vargs); return fmt.format(arg, ctx); } diff --git a/test/compile-test.cc b/test/compile-test.cc index 3f9fb0dc..f1fd65b3 100644 --- a/test/compile-test.cc +++ b/test/compile-test.cc @@ -155,6 +155,9 @@ TEST(CompileTest, FormatWideString) { TEST(CompileTest, FormatSpecs) { EXPECT_EQ("42", fmt::format(FMT_COMPILE("{:x}"), 0x42)); + EXPECT_EQ("1.234000:0042:+3.13:str:0x3e8:X", + fmt::format(FMT_COMPILE("{:.6f}:{:04}:{:+}:{}:{}:{}"), 1.234, 42, + 3.13, "str", reinterpret_cast(1000), 'X')); } TEST(CompileTest, DynamicWidth) { @@ -163,18 +166,39 @@ TEST(CompileTest, DynamicWidth) { } TEST(CompileTest, FormatTo) { - char buf[8]; - auto end = fmt::format_to(buf, FMT_COMPILE("{}"), 42); - *end = '\0'; - EXPECT_STREQ("42", buf); + { + char buf[8]; + auto end = fmt::format_to(buf, FMT_COMPILE("{}"), 42); + *end = '\0'; + EXPECT_STREQ("42", buf); + } + { + char buf[100]; + auto end = + fmt::format_to(buf, FMT_COMPILE("{:.6f}:{:04}:{:+}:{}:{}:{}"), 1.234, + 42, 3.13, "str", reinterpret_cast(1000), 'X'); + *end = '\0'; + EXPECT_STREQ("1.234000:0042:+3.13:str:0x3e8:X", buf); + } } TEST(CompileTest, FormatToNWithCompileMacro) { - constexpr auto buffer_size = 8; - char buffer[buffer_size]; - auto res = fmt::format_to_n(buffer, buffer_size, FMT_COMPILE("{}"), 42); - *res.out = '\0'; - EXPECT_STREQ("42", buffer); + { + constexpr auto buffer_size = 8; + char buffer[buffer_size]; + auto res = fmt::format_to_n(buffer, buffer_size, FMT_COMPILE("{}"), 42); + *res.out = '\0'; + EXPECT_STREQ("42", buffer); + } + { + constexpr auto buffer_size = 100; + char buffer[buffer_size]; + auto res = fmt::format_to_n( + buffer, buffer_size, FMT_COMPILE("{:.6f}:{:04}:{:+}:{}:{}:{}"), 1.234, + 42, 3.13, "str", reinterpret_cast(1000), 'X'); + *res.out = '\0'; + EXPECT_STREQ("1.234000:0042:+3.13:str:0x3e8:X", buffer); + } } TEST(CompileTest, TextAndArg) {