diff --git a/include/fmt/format.h b/include/fmt/format.h index 92a1d5b7a04d..9cd523a9e6a5 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -1203,7 +1203,7 @@ FMT_CONSTEXPR FMT_INLINE auto format_decimal(Char* out, UInt value, } template ::value)> + FMT_ENABLE_IF(!std::is_pointer>::value)> FMT_CONSTEXPR auto format_decimal(OutputIt out, UInt value, int num_digits) -> OutputIt { if (auto ptr = to_pointer(out, to_unsigned(num_digits))) { diff --git a/test/compile-test.cc b/test/compile-test.cc index 043588e49050..d708aa7882c4 100644 --- a/test/compile-test.cc +++ b/test/compile-test.cc @@ -7,6 +7,8 @@ #include "fmt/compile.h" +#include +#include #include #include @@ -199,6 +201,21 @@ TEST(compile_test, format_to_n) { EXPECT_STREQ("2a", buffer); } +TEST(compile_test, output_iterators) { + std::list out; + fmt::format_to(std::back_inserter(out), FMT_COMPILE("{}"), 42); + EXPECT_EQ("42", std::string(out.begin(), out.end())); + + std::stringstream s; + fmt::format_to(std::ostream_iterator(s), FMT_COMPILE("{}"), 42); + EXPECT_EQ("42", s.str()); + + std::stringstream s2; + fmt::format_to(std::ostreambuf_iterator(s2), FMT_COMPILE("{}.{:06d}"), + 42, 43); + EXPECT_EQ("42.000043", s2.str()); +} + # if FMT_USE_CONSTEVAL && (!FMT_MSC_VERSION || FMT_MSC_VERSION >= 1940) TEST(compile_test, constexpr_formatted_size) { FMT_CONSTEXPR20 size_t size = fmt::formatted_size(FMT_COMPILE("{}"), 42); diff --git a/test/format-test.cc b/test/format-test.cc index 60707e6a4247..34c7f44eda88 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -2102,6 +2102,10 @@ TEST(format_test, output_iterators) { std::stringstream s; fmt::format_to(std::ostream_iterator(s), "{}", 42); EXPECT_EQ("42", s.str()); + + std::stringstream s2; + fmt::format_to(std::ostreambuf_iterator(s2), "{}.{:06d}", 42, 43); + EXPECT_EQ("42.000043", s2.str()); } TEST(format_test, fill_via_appender) {