diff --git a/include/fmt/format.h b/include/fmt/format.h index 7402a055..0e25c4a5 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -1399,8 +1399,9 @@ class arg_formatter_base { } void write(const char_type *value) { - auto length = value != FMT_NULL ? - std::char_traits::length(value) : 0; + if (!value) + FMT_THROW(format_error("string pointer is null")); + auto length = std::char_traits::length(value); writer_.write_str(basic_string_view(value, length), specs_); } @@ -2647,8 +2648,6 @@ void basic_writer::write_str( internal::char_traits::convert(Char()); const Char *data = s.data(); std::size_t size = s.size(); - if (size == 0 && !data) - FMT_THROW(format_error("string pointer is null")); std::size_t precision = static_cast(spec.precision_); if (spec.precision_ >= 0 && precision < size) size = precision; diff --git a/test/format-test.cc b/test/format-test.cc index aec17273..0ea41c83 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -1196,7 +1196,8 @@ TEST(FormatterTest, FormatString) { } TEST(FormatterTest, FormatStringView) { - EXPECT_EQ("test", format("{0}", string_view("test"))); + EXPECT_EQ("test", format("{}", string_view("test"))); + EXPECT_EQ("", format("{}", string_view())); } #ifdef FMT_USE_STD_STRING_VIEW