10auto u8format_argument_cast(Arg
const &arg)
noexcept -> std::
11 conditional_t<std::is_same_v<Arg, std::u8string_view> || std::is_same_v<Arg, std::u8string>, std::string_view, Arg
const &>
13 if constexpr (std::is_same_v<Arg, std::u8string_view> || std::is_same_v<Arg, std::u8string>) {
14 return std::string_view{
reinterpret_cast<char const *
>(arg.data()), arg.size()};
22template<
typename... Args>
23std::u8string format(
const std::locale &loc, std::u8string_view fmt,
const Args &... args)
26 auto r = fmt::format(detail::u8format_argument_cast(fmt), detail::u8format_argument_cast(args)...);
30 return std::u8string(
reinterpret_cast<char8_t *
>(r.data()), r.size());
33template<
typename... Args>
34std::u8string format(std::u8string_view fmt,
const Args &... args)
39constexpr inline bool format_uses_arg_ids(
const char *fmt)
41 bool start_placeholder =
false;
47 }
else if (c ==
'{') {
48 start_placeholder =
true;
49 }
else if (start_placeholder && c >=
'0' && c <=
'9') {
52 start_placeholder =
false;