From 2e281620fccf8e68e6ea6f323d4a7036a6507a3a Mon Sep 17 00:00:00 2001 From: Barry Revzin Date: Wed, 27 Jul 2022 07:11:45 -0500 Subject: [PATCH] Different implementation of FMT_STATICALLY_WIDEN --- include/fmt/ranges.h | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/include/fmt/ranges.h b/include/fmt/ranges.h index 5d807f3c..5a13fcc2 100644 --- a/include/fmt/ranges.h +++ b/include/fmt/ranges.h @@ -319,9 +319,13 @@ inline FMT_CONSTEXPR const wchar_t* choose_literal( return literal; } -#define FMT_STATICALLY_WIDEN(CharT, Literal) \ - ::fmt::detail::choose_literal(std::is_same(), Literal, \ - L##Literal) +template struct string_literal { + static constexpr CharT value[] = {C...}; + constexpr operator basic_string_view() const { + return {value, sizeof...(C)}; + } +}; + } // namespace detail template struct is_tuple_like { @@ -339,9 +343,11 @@ struct formatter::value && fmt::is_tuple_formattable::value>> { private: - basic_string_view separator_ = FMT_STATICALLY_WIDEN(Char, ", "); - basic_string_view opening_bracket_ = FMT_STATICALLY_WIDEN(Char, "("); - basic_string_view closing_bracket_ = FMT_STATICALLY_WIDEN(Char, ")"); + basic_string_view separator_ = detail::string_literal{}; + basic_string_view opening_bracket_ = + detail::string_literal{}; + basic_string_view closing_bracket_ = + detail::string_literal{}; // C++11 generic lambda for format(). template struct format_each { @@ -435,9 +441,11 @@ struct range_formatter< private: detail::range_formatter_type underlying_; bool custom_specs_ = false; - basic_string_view separator_ = FMT_STATICALLY_WIDEN(Char, ", "); - basic_string_view opening_bracket_ = FMT_STATICALLY_WIDEN(Char, "["); - basic_string_view closing_bracket_ = FMT_STATICALLY_WIDEN(Char, "]"); + basic_string_view separator_ = detail::string_literal{}; + basic_string_view opening_bracket_ = + detail::string_literal{}; + basic_string_view closing_bracket_ = + detail::string_literal{}; template FMT_CONSTEXPR static auto maybe_set_debug_format(U& u, int) @@ -545,15 +553,16 @@ struct range_default_formatter< FMT_CONSTEXPR range_default_formatter() { init(range_format_constant()); } FMT_CONSTEXPR void init(range_format_constant) { - underlying_.set_brackets(FMT_STATICALLY_WIDEN(Char, "{"), - FMT_STATICALLY_WIDEN(Char, "}")); + underlying_.set_brackets(detail::string_literal{}, + detail::string_literal{}); } FMT_CONSTEXPR void init(range_format_constant) { - underlying_.set_brackets(FMT_STATICALLY_WIDEN(Char, "{"), - FMT_STATICALLY_WIDEN(Char, "}")); + underlying_.set_brackets(detail::string_literal{}, + detail::string_literal{}); underlying_.underlying().set_brackets({}, {}); - underlying_.underlying().set_separator(FMT_STATICALLY_WIDEN(Char, ": ")); + underlying_.underlying().set_separator( + detail::string_literal{}); } FMT_CONSTEXPR void init(range_format_constant) {}