This commit is contained in:
Victor Zverovich 2024-09-08 11:32:42 -07:00
parent 02c5d637c5
commit 967e2d177d
3 changed files with 14 additions and 17 deletions

View File

@ -33,11 +33,9 @@ namespace detail {
FMT_FUNC void assert_fail(const char* file, int line, const char* message) { FMT_FUNC void assert_fail(const char* file, int line, const char* message) {
// Use unchecked std::fprintf to avoid triggering another assertion when // Use unchecked std::fprintf to avoid triggering another assertion when
// writing to stderr fails // writing to stderr fails.
std::fprintf(stderr, "%s:%d: assertion failed: %s", file, line, message); fprintf(stderr, "%s:%d: assertion failed: %s", file, line, message);
// Chosen instead of std::abort to satisfy Clang in CUDA mode during device abort();
// code pass.
std::terminate();
} }
FMT_FUNC void format_error_code(detail::buffer<char>& out, int error_code, FMT_FUNC void format_error_code(detail::buffer<char>& out, int error_code,

View File

@ -3868,17 +3868,14 @@ template <typename Char>
void vformat_to(buffer<Char>& buf, basic_string_view<Char> fmt, void vformat_to(buffer<Char>& buf, basic_string_view<Char> fmt,
typename vformat_args<Char>::type args, locale_ref loc = {}) { typename vformat_args<Char>::type args, locale_ref loc = {}) {
auto out = basic_appender<Char>(buf); auto out = basic_appender<Char>(buf);
if (fmt.size() == 2 && equal2(fmt.data(), "{}"))
return args.get(0).visit(default_arg_formatter<Char>{out});
parse_format_string( parse_format_string(
fmt, format_handler<Char>{parse_context<Char>(fmt), {out, args, loc}}); fmt, format_handler<Char>{parse_context<Char>(fmt), {out, args, loc}});
} }
template <typename Locale, typename Char> template <typename Locale>
auto vformat(const Locale& loc, basic_string_view<Char> fmt, auto vformat(const Locale& loc, string_view fmt, format_args args)
typename detail::vformat_args<Char>::type args) -> std::string {
-> std::basic_string<Char> { auto buf = memory_buffer();
auto buf = basic_memory_buffer<Char>();
detail::vformat_to(buf, fmt, args, detail::locale_ref(loc)); detail::vformat_to(buf, fmt, args, detail::locale_ref(loc));
return {buf.data(), buf.size()}; return {buf.data(), buf.size()};
} }

View File

@ -197,10 +197,13 @@ template <typename Locale, typename S,
typename Char = detail::format_string_char_t<S>, typename Char = detail::format_string_char_t<S>,
FMT_ENABLE_IF(detail::is_locale<Locale>::value&& FMT_ENABLE_IF(detail::is_locale<Locale>::value&&
detail::is_exotic_char<Char>::value)> detail::is_exotic_char<Char>::value)>
inline auto vformat(const Locale& loc, const S& format_str, inline auto vformat(const Locale& loc, const S& fmt,
typename detail::vformat_args<Char>::type args) typename detail::vformat_args<Char>::type args)
-> std::basic_string<Char> { -> std::basic_string<Char> {
return detail::vformat(loc, detail::to_string_view(format_str), args); auto buf = basic_memory_buffer<Char>();
detail::vformat_to(buf, detail::to_string_view(fmt), args,
detail::locale_ref(loc));
return {buf.data(), buf.size()};
} }
template <typename Locale, typename S, typename... T, template <typename Locale, typename S, typename... T,
@ -209,9 +212,8 @@ template <typename Locale, typename S, typename... T,
detail::is_exotic_char<Char>::value)> detail::is_exotic_char<Char>::value)>
inline auto format(const Locale& loc, const S& format_str, T&&... args) inline auto format(const Locale& loc, const S& format_str, T&&... args)
-> std::basic_string<Char> { -> std::basic_string<Char> {
return detail::vformat( return vformat(loc, detail::to_string_view(format_str),
loc, detail::to_string_view(format_str), fmt::make_format_args<buffered_context<Char>>(args...));
fmt::make_format_args<buffered_context<Char>>(args...));
} }
template <typename OutputIt, typename S, template <typename OutputIt, typename S,