diff --git a/src/lib/fmt/ToBuffer.hxx b/src/lib/fmt/ToBuffer.hxx index cba9a4070..563223dda 100644 --- a/src/lib/fmt/ToBuffer.hxx +++ b/src/lib/fmt/ToBuffer.hxx @@ -10,16 +10,39 @@ #include // for the fmt::buffer::flush() implementation #endif +template +StringBuffer & +VFmtToBuffer(StringBuffer &buffer, + fmt::string_view format_str, fmt::format_args args) noexcept +{ + auto [p, _] = fmt::vformat_to_n(buffer.begin(), buffer.capacity() - 1, + format_str, args); + *p = 0; + return buffer; +} + template [[nodiscard]] [[gnu::pure]] auto VFmtBuffer(fmt::string_view format_str, fmt::format_args args) noexcept { StringBuffer buffer; - auto [p, _] = fmt::vformat_to_n(buffer.begin(), buffer.capacity() - 1, - format_str, args); - *p = 0; - return buffer; + return VFmtToBuffer(buffer, format_str, args); +} + +template +StringBuffer & +FmtToBuffer(StringBuffer &buffer, + const S &format_str, Args&&... args) noexcept +{ +#if FMT_VERSION >= 90000 + return VFmtToBuffer(buffer, format_str, + fmt::make_format_args(args...)); +#else + return VFmtToBuffer(buffer, fmt::to_string_view(format_str), + fmt::make_args_checked(format_str, + args...)); +#endif } template