diff --git a/include/fmt/core.h b/include/fmt/core.h index 37d27285..82b7d4a2 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -1949,7 +1949,7 @@ std::basic_string vformat( FMT_API std::string vformat(string_view format_str, format_args args); template -buffer_appender vformat_to( +void vformat_to( buffer& buf, basic_string_view format_str, basic_format_args)> args, detail::locale_ref loc = {}); diff --git a/include/fmt/format.h b/include/fmt/format.h index eaae6d36..91487cb3 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -3746,29 +3746,28 @@ std::basic_string to_string(const basic_memory_buffer& buf) { } template -detail::buffer_appender detail::vformat_to( +void detail::vformat_to( detail::buffer& buf, basic_string_view format_str, basic_format_args>> args, detail::locale_ref loc) { using iterator = typename buffer_context::iterator; auto out = buffer_appender(buf); - if (format_str.size() == 2 && detail::equal2(format_str.data(), "{}")) { + if (format_str.size() == 2 && equal2(format_str.data(), "{}")) { auto arg = args.get(0); - if (!arg) detail::error_handler().on_error("argument not found"); - return visit_format_arg( - detail::default_arg_formatter{out, args, loc}, arg); + if (!arg) error_handler().on_error("argument not found"); + visit_format_arg(default_arg_formatter{out, args, loc}, + arg); + return; } - detail::format_handler, Char, - buffer_context> - h(out, format_str, args, loc); - detail::parse_format_string(format_str, h); - return h.context.out(); + format_handler, Char, buffer_context> h( + out, format_str, args, loc); + parse_format_string(format_str, h); } #ifndef FMT_HEADER_ONLY -extern template format_context::iterator detail::vformat_to( - detail::buffer&, string_view, basic_format_args, - detail::locale_ref); +extern template void detail::vformat_to(detail::buffer&, string_view, + basic_format_args, + detail::locale_ref); namespace detail { extern template FMT_API std::string grouping_impl(locale_ref loc); extern template FMT_API std::string grouping_impl(locale_ref loc); @@ -3795,7 +3794,7 @@ extern template int snprintf_float(long double value, template , FMT_ENABLE_IF(detail::is_string::value)> -inline typename FMT_BUFFER_CONTEXT(Char)::iterator vformat_to( +inline void vformat_to( detail::buffer& buf, const S& format_str, basic_format_args)> args) { return detail::vformat_to(buf, to_string_view(format_str), args); @@ -3806,7 +3805,8 @@ template ::iterator format_to( basic_memory_buffer& buf, const S& format_str, Args&&... args) { const auto& vargs = fmt::make_args_checked(format_str, args...); - return detail::vformat_to(buf, to_string_view(format_str), vargs); + detail::vformat_to(buf, to_string_view(format_str), vargs); + return detail::buffer_appender(buf); } template diff --git a/include/fmt/locale.h b/include/fmt/locale.h index aeda64aa..517f6505 100644 --- a/include/fmt/locale.h +++ b/include/fmt/locale.h @@ -15,21 +15,12 @@ FMT_BEGIN_NAMESPACE namespace detail { -template -typename buffer_context::iterator vformat_to( - const std::locale& loc, buffer& buf, - basic_string_view format_str, - basic_format_args>> args) { - return vformat_to(buf, to_string_view(format_str), args, - detail::locale_ref(loc)); -} - template std::basic_string vformat( const std::locale& loc, basic_string_view format_str, basic_format_args>> args) { basic_memory_buffer buffer; - detail::vformat_to(loc, buffer, format_str, args); + detail::vformat_to(buffer, format_str, args, detail::locale_ref(loc)); return fmt::to_string(buffer); } } // namespace detail diff --git a/src/format.cc b/src/format.cc index 7f0b6882..72713416 100644 --- a/src/format.cc +++ b/src/format.cc @@ -44,7 +44,7 @@ template FMT_API char detail::decimal_point_impl(locale_ref); template FMT_API void detail::buffer::append(const char*, const char*); -template FMT_API FMT_BUFFER_CONTEXT(char)::iterator detail::vformat_to( +template FMT_API void detail::vformat_to( detail::buffer&, string_view, basic_format_args, detail::locale_ref);