Adding a put(formatter, object) overload too.
This commit is contained in:
parent
931cfcfbbe
commit
a02f7b84c7
@ -1778,11 +1778,18 @@ template <typename OutputIt, typename Char> class basic_format_context {
|
||||
|
||||
FMT_CONSTEXPR auto put(char_type c) -> iterator {
|
||||
*out_++ = c;
|
||||
return out;
|
||||
return out_;
|
||||
}
|
||||
FMT_CONSTEXPR auto put(basic_string_view<char_type> sv) -> iterator {
|
||||
detail::copy_str<char_type>(sv.data(), sv.data() + sv.size(), out);
|
||||
return out;
|
||||
detail::copy_str<char_type>(sv.data(), sv.data() + sv.size(), out_);
|
||||
return out_;
|
||||
}
|
||||
|
||||
template <typename T, typename U,
|
||||
FMT_ENABLE_IF(std::is_same<T, std::remove_const_t<U>>::value)>
|
||||
FMT_CONSTEXPR auto put(formatter<T>& f, U& object) -> iterator {
|
||||
advance_to(f.format(object, *this));
|
||||
return out_;
|
||||
}
|
||||
|
||||
FMT_CONSTEXPR auto locale() -> detail::locale_ref { return loc_; }
|
||||
|
||||
@ -2194,3 +2194,30 @@ TEST(format_int_test, format_int) {
|
||||
os << max_value<int64_t>();
|
||||
EXPECT_EQ(os.str(), fmt::format_int(max_value<int64_t>()).str());
|
||||
}
|
||||
|
||||
struct put_on_the_ritz {
|
||||
int i;
|
||||
};
|
||||
|
||||
FMT_BEGIN_NAMESPACE
|
||||
template <> struct formatter<put_on_the_ritz> {
|
||||
formatter<int> underlying;
|
||||
|
||||
FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> decltype(ctx.begin()) {
|
||||
return underlying.parse(ctx);
|
||||
}
|
||||
|
||||
auto format(put_on_the_ritz r, format_context& ctx) -> decltype(ctx.out()) {
|
||||
ctx.put('{');
|
||||
ctx.put(".i=");
|
||||
ctx.put(underlying, r.i);
|
||||
ctx.put('}');
|
||||
return ctx.out();
|
||||
}
|
||||
};
|
||||
FMT_END_NAMESPACE
|
||||
|
||||
TEST(format_test, format_context_put) {
|
||||
EXPECT_EQ(fmt::format("[{}]", put_on_the_ritz{42}), "[{.i=42}]");
|
||||
EXPECT_EQ(fmt::format("[{:#x}]", put_on_the_ritz{42}), "[{.i=0x2a}]");
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user