mirror of
https://github.com/fmtlib/fmt.git
synced 2025-01-27 15:35:18 +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>
|
template <typename OutputIt, typename T, typename Traits>
|
||||||
void iterator_buffer<OutputIt, T, Traits>::flush() {
|
void iterator_buffer<OutputIt, T, Traits>::flush() {
|
||||||
out_ = copy_str<T>(data_, data_ + this->limit(this->size()), out_);
|
auto size = this->size();
|
||||||
this->clear();
|
this->clear();
|
||||||
|
out_ = copy_str<T>(data_, data_ + this->limit(size), out_);
|
||||||
}
|
}
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
|
@ -2021,6 +2021,17 @@ TEST(FormatTest, FormatTo) {
|
|||||||
EXPECT_EQ(string_view(v.data(), v.size()), "foo");
|
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) {
|
TEST(FormatTest, FormatToN) {
|
||||||
char buffer[4];
|
char buffer[4];
|
||||||
buffer[3] = 'x';
|
buffer[3] = 'x';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user