diff --git a/include/fmt/ranges.h b/include/fmt/ranges.h index 57ccb6a0ae3d8..f9dc523de5a18 100644 --- a/include/fmt/ranges.h +++ b/include/fmt/ranges.h @@ -515,7 +515,8 @@ struct formatter< enable_if_t::value != range_format::disabled && - range_format_kind::value != range_format::map> + range_format_kind::value != range_format::map && + range_format_kind::value != range_format::string> // Workaround a bug in MSVC 2015 and earlier. #if !FMT_MSC_VERSION || FMT_MSC_VERSION >= 1910 , @@ -604,6 +605,30 @@ struct formatter< } }; +// A string formatter. +template +struct formatter< + R, Char, + enable_if_t::value == range_format::string>> { + private: + using range_type = detail::maybe_const_range; + formatter, Char> range_formatter_; + + public: + FMT_CONSTEXPR formatter() {} + + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { + return range_formatter_.parse(ctx); + } + + template + auto format(range_type& range, + FormatContext& ctx) const -> decltype(ctx.out()) { + return range_formatter_.format(std::basic_string_view(range), ctx); + } +}; + template struct join_view : detail::view { It begin;