From f3d510c10c53819a60aeb443d709fe021094b787 Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Sat, 31 Jan 2026 20:25:18 -0800 Subject: [PATCH] Improve compatibility with std::format --- include/fmt/base.h | 11 +++++++++-- include/fmt/format.h | 8 -------- include/fmt/xchar.h | 16 ++++++++-------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/include/fmt/base.h b/include/fmt/base.h index d322d7ce..d6fae38f 100644 --- a/include/fmt/base.h +++ b/include/fmt/base.h @@ -231,6 +231,14 @@ FMT_PRAGMA_GCC(optimize("Og")) #endif FMT_PRAGMA_CLANG(diagnostic push) +#ifdef FMT_DEPRECATED +// Use the provided definition. +#elif FMT_HAS_CPP14_ATTRIBUTE(deprecated) +# define FMT_DEPRECATED [[deprecated]] +#else +# define FMT_DEPRECATED /* deprecated */ +#endif + #ifdef FMT_ALWAYS_INLINE // Use the provided definition. #elif FMT_GCC_VERSION || FMT_CLANG_VERSION @@ -2656,8 +2664,7 @@ template struct fstring { } fstring(runtime_format_string<> fmt) : str(fmt.str) {} - // Returning by reference generates better code in debug mode. - FMT_ALWAYS_INLINE operator const string_view&() const { return str; } + FMT_DEPRECATED operator const string_view&() const { return str; } auto get() const -> string_view { return str; } }; diff --git a/include/fmt/format.h b/include/fmt/format.h index c8d57ddd..d34314d8 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -121,14 +121,6 @@ # define FMT_NOINLINE #endif -#ifdef FMT_DEPRECATED -// Use the provided definition. -#elif FMT_HAS_CPP14_ATTRIBUTE(deprecated) -# define FMT_DEPRECATED [[deprecated]] -#else -# define FMT_DEPRECATED /* deprecated */ -#endif - // Detect constexpr std::string. #if !FMT_USE_CONSTEVAL # define FMT_USE_CONSTEXPR_STRING 0 diff --git a/include/fmt/xchar.h b/include/fmt/xchar.h index 9334b87f..f80e915d 100644 --- a/include/fmt/xchar.h +++ b/include/fmt/xchar.h @@ -109,7 +109,7 @@ template struct basic_fstring { } basic_fstring(runtime_format_string fmt) : str_(fmt.str) {} - operator basic_string_view() const { return str_; } + FMT_DEPRECATED operator basic_string_view() const { return str_; } auto get() const -> basic_string_view { return str_; } }; @@ -172,14 +172,13 @@ auto vformat(basic_string_view fmt, template auto format(wformat_string fmt, T&&... args) -> std::wstring { - return vformat(fmt::wstring_view(fmt), fmt::make_wformat_args(args...)); + return vformat(fmt.get(), fmt::make_wformat_args(args...)); } template auto format_to(OutputIt out, wformat_string fmt, T&&... args) -> OutputIt { - return vformat_to(out, fmt::wstring_view(fmt), - fmt::make_wformat_args(args...)); + return vformat_to(out, fmt.get(), fmt::make_wformat_args(args...)); } // Pass char_t as a default template parameter instead of using @@ -301,11 +300,11 @@ inline void vprint(wstring_view fmt, wformat_args args) { template void print(std::FILE* f, wformat_string fmt, T&&... args) { - return vprint(f, wstring_view(fmt), fmt::make_wformat_args(args...)); + return vprint(f, fmt.get(), fmt::make_wformat_args(args...)); } template void print(wformat_string fmt, T&&... args) { - return vprint(wstring_view(fmt), fmt::make_wformat_args(args...)); + return vprint(fmt.get(), fmt::make_wformat_args(args...)); } template @@ -327,7 +326,7 @@ inline auto vformat(text_style ts, wstring_view fmt, wformat_args args) template inline auto format(text_style ts, wformat_string fmt, T&&... args) -> std::wstring { - return fmt::vformat(ts, fmt, fmt::make_wformat_args(args...)); + return fmt::vformat(ts, fmt.get(), fmt::make_wformat_args(args...)); } inline void vprint(std::wostream& os, wstring_view fmt, wformat_args args) { @@ -338,7 +337,8 @@ inline void vprint(std::wostream& os, wstring_view fmt, wformat_args args) { template void print(std::wostream& os, wformat_string fmt, T&&... args) { - vprint(os, fmt, fmt::make_format_args>(args...)); + vprint(os, fmt.get(), + fmt::make_format_args>(args...)); } template