mirror of
https://github.com/fmtlib/fmt.git
synced 2024-11-22 10:30:05 +00:00
Fix exception propagation from iterators (#2097)
This commit is contained in:
parent
acef0bb51a
commit
ce519e939b
@ -658,8 +658,9 @@ void buffer<T>::append(const U* begin, const U* end) {
|
||||
|
||||
template <typename OutputIt, typename T, typename Traits>
|
||||
void iterator_buffer<OutputIt, T, Traits>::flush() {
|
||||
out_ = copy_str<T>(data_, data_ + this->limit(this->size()), out_);
|
||||
auto size = this->size();
|
||||
this->clear();
|
||||
out_ = copy_str<T>(data_, data_ + this->limit(size), out_);
|
||||
}
|
||||
} // namespace detail
|
||||
|
||||
|
@ -2021,6 +2021,17 @@ TEST(FormatTest, FormatTo) {
|
||||
EXPECT_EQ(string_view(v.data(), v.size()), "foo");
|
||||
}
|
||||
|
||||
struct nongrowing_container {
|
||||
using value_type = char;
|
||||
void push_back(char) { throw std::runtime_error("can't take it any more"); }
|
||||
};
|
||||
|
||||
TEST(FormatTest, FormatToPropagatesExceptions) {
|
||||
auto c = nongrowing_container();
|
||||
EXPECT_THROW(fmt::format_to(std::back_inserter(c), "{}", 42),
|
||||
std::runtime_error);
|
||||
}
|
||||
|
||||
TEST(FormatTest, FormatToN) {
|
||||
char buffer[4];
|
||||
buffer[3] = 'x';
|
||||
|
Loading…
Reference in New Issue
Block a user