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 {
|
FMT_CONSTEXPR auto put(char_type c) -> iterator {
|
||||||
*out_++ = c;
|
*out_++ = c;
|
||||||
return out;
|
return out_;
|
||||||
}
|
}
|
||||||
FMT_CONSTEXPR auto put(basic_string_view<char_type> sv) -> iterator {
|
FMT_CONSTEXPR auto put(basic_string_view<char_type> sv) -> iterator {
|
||||||
detail::copy_str<char_type>(sv.data(), sv.data() + sv.size(), out);
|
detail::copy_str<char_type>(sv.data(), sv.data() + sv.size(), out_);
|
||||||
return 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_; }
|
FMT_CONSTEXPR auto locale() -> detail::locale_ref { return loc_; }
|
||||||
|
|||||||
@ -2194,3 +2194,30 @@ TEST(format_int_test, format_int) {
|
|||||||
os << max_value<int64_t>();
|
os << max_value<int64_t>();
|
||||||
EXPECT_EQ(os.str(), fmt::format_int(max_value<int64_t>()).str());
|
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