mirror of
https://github.com/fmtlib/fmt.git
synced 2025-01-26 12:35:32 +00:00
Fix handling of iterators in locale-specific formatting (#1782)
This commit is contained in:
parent
633213d96f
commit
d82fdcc9e2
@ -758,9 +758,9 @@ using uint32_or_64_or_128_t =
|
|||||||
// Smallest of uint32_t, uint64_t, uint128_t that is large enough to
|
// Smallest of uint32_t, uint64_t, uint128_t that is large enough to
|
||||||
// represent all values of T.
|
// represent all values of T.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
using uint32_or_64_or_128_t = conditional_t<
|
using uint32_or_64_or_128_t =
|
||||||
num_bits<T>() <= 32, uint32_t,
|
conditional_t<num_bits<T>() <= 32, uint32_t,
|
||||||
conditional_t<num_bits<T>() <= 64, uint64_t, uint128_t>>;
|
conditional_t<num_bits<T>() <= 64, uint64_t, uint128_t>>;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Static data is placed in this class template for the header-only config.
|
// Static data is placed in this class template for the header-only config.
|
||||||
@ -1607,7 +1607,8 @@ template <typename OutputIt, typename Char, typename UInt> struct int_writer {
|
|||||||
make_checked(p, s.size()));
|
make_checked(p, s.size()));
|
||||||
}
|
}
|
||||||
if (prefix_size != 0) p[-1] = static_cast<Char>('-');
|
if (prefix_size != 0) p[-1] = static_cast<Char>('-');
|
||||||
write(out, basic_string_view<Char>(buffer.data(), buffer.size()), specs);
|
out = write(out, basic_string_view<Char>(buffer.data(), buffer.size()),
|
||||||
|
specs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_chr() { *out++ = static_cast<Char>(abs_value); }
|
void on_chr() { *out++ = static_cast<Char>(abs_value); }
|
||||||
|
@ -89,4 +89,16 @@ TEST(LocaleTest, WFormat) {
|
|||||||
fmt::format(small_grouping_loc, L"{:L}", max_value<uint32_t>()));
|
fmt::format(small_grouping_loc, L"{:L}", max_value<uint32_t>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(LocaleTest, DoubleFormatter) {
|
||||||
|
auto loc = std::locale(std::locale(), new special_grouping<char>());
|
||||||
|
auto f = fmt::formatter<int>();
|
||||||
|
auto parse_ctx = fmt::format_parse_context("L");
|
||||||
|
f.parse(parse_ctx);
|
||||||
|
char buf[10] = {};
|
||||||
|
fmt::basic_format_context<char*, char> format_ctx(
|
||||||
|
buf, {}, fmt::detail::locale_ref(loc));
|
||||||
|
*f.format(12345, format_ctx) = 0;
|
||||||
|
EXPECT_STREQ("12,345", buf);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // FMT_STATIC_THOUSANDS_SEPARATOR
|
#endif // FMT_STATIC_THOUSANDS_SEPARATOR
|
||||||
|
Loading…
x
Reference in New Issue
Block a user