Commit 8c29459e authored by Victor Zverovich's avatar Victor Zverovich

Fix handling of empty string_view (#689)

parent a24005d5
...@@ -1399,8 +1399,9 @@ class arg_formatter_base { ...@@ -1399,8 +1399,9 @@ class arg_formatter_base {
} }
void write(const char_type *value) { void write(const char_type *value) {
auto length = value != FMT_NULL ? if (!value)
std::char_traits<char_type>::length(value) : 0; FMT_THROW(format_error("string pointer is null"));
auto length = std::char_traits<char_type>::length(value);
writer_.write_str(basic_string_view<char_type>(value, length), specs_); writer_.write_str(basic_string_view<char_type>(value, length), specs_);
} }
...@@ -2647,8 +2648,6 @@ void basic_writer<Range>::write_str( ...@@ -2647,8 +2648,6 @@ void basic_writer<Range>::write_str(
internal::char_traits<char_type>::convert(Char()); internal::char_traits<char_type>::convert(Char());
const Char *data = s.data(); const Char *data = s.data();
std::size_t size = s.size(); std::size_t size = s.size();
if (size == 0 && !data)
FMT_THROW(format_error("string pointer is null"));
std::size_t precision = static_cast<std::size_t>(spec.precision_); std::size_t precision = static_cast<std::size_t>(spec.precision_);
if (spec.precision_ >= 0 && precision < size) if (spec.precision_ >= 0 && precision < size)
size = precision; size = precision;
......
...@@ -1196,7 +1196,8 @@ TEST(FormatterTest, FormatString) { ...@@ -1196,7 +1196,8 @@ TEST(FormatterTest, FormatString) {
} }
TEST(FormatterTest, FormatStringView) { 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 #ifdef FMT_USE_STD_STRING_VIEW
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment