diff --git a/include/fmt/format.h b/include/fmt/format.h index 116cd26f..f428fb6b 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -3005,6 +3005,7 @@ FMT_FORMAT_AS(float, double); FMT_FORMAT_AS(Char*, const Char*); FMT_FORMAT_AS(std::basic_string, basic_string_view); FMT_FORMAT_AS(std::nullptr_t, const void*); +FMT_FORMAT_AS(internal::std_string_view, basic_string_view); template struct formatter : formatter { diff --git a/test/format-test.cc b/test/format-test.cc index 1c292ba0..2b9b5857 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -1590,9 +1590,20 @@ TEST(FormatterTest, FormatStringView) { EXPECT_EQ("", format("{}", string_view())); } -#ifdef FMT_USE_STD_STRING_VIEW +#ifdef FMT_USE_STRING_VIEW +struct string_viewable {}; + +FMT_BEGIN_NAMESPACE +template <> struct formatter : formatter { + auto format(string_viewable, format_context& ctx) -> decltype(ctx.out()) { + return formatter::format("foo", ctx); + } +}; +FMT_END_NAMESPACE + TEST(FormatterTest, FormatStdStringView) { - EXPECT_EQ("test", format("{0}", std::string_view("test"))); + EXPECT_EQ("test", format("{}", std::string_view("test"))); + EXPECT_EQ("foo", format("{}", string_viewable())); } #endif