62 template <
typename CharT>
static auto do_format(
auto& out,
const T& value)
64 if constexpr (std::is_same_v<CharT, wchar_t>)
66 return std::format_to(out, L
"{}", Converter{}(value));
70 return std::format_to(out,
"{}", Converter{}(value));
83 constexpr auto parse(
auto& context) {
return context.begin(); }
95 template <
typename FormatContext>
auto format(
const T& value, FormatContext& context)
const
98 typename std::iterator_traits<typename FormatContext::iterator>::value_type;
131 template <
typename... FormatArgs>
132 static auto format(
const char* formats,
const FormatArgs&... args) -> std::string
134 return std::vformat(formats, std::make_format_args(args...));
144 template <
typename... FormatArgs>
145 static auto format(
const wchar_t* formats,
const FormatArgs&... args) -> std::wstring
147 return std::vformat(formats, std::make_wformat_args(args...));
161 template <
typename OutputIt,
typename... FormatArgs>
162 static auto format_to(OutputIt out,
const char* formats,
const FormatArgs&... args)
165 return std::vformat_to(out, formats, std::make_format_args(args...));
177 template <
typename OutputIt,
typename... FormatArgs>
178 static auto format_to(OutputIt out,
const wchar_t* formats,
const FormatArgs&... args)
181 return std::vformat_to(out, formats, std::make_wformat_args(args...));
190 template <
typename T,
typename Converter>
kcenon::thread::utils::formatter formatter