Return locale by value

This commit is contained in:
Victor Zverovich 2017-03-25 08:57:23 -07:00
parent 32ec13f149
commit 5aa8d6ea21

View File

@ -646,7 +646,7 @@ class basic_buffer {
T &operator[](std::size_t index) { return ptr_[index]; } T &operator[](std::size_t index) { return ptr_[index]; }
const T &operator[](std::size_t index) const { return ptr_[index]; } const T &operator[](std::size_t index) const { return ptr_[index]; }
virtual const std::locale* locale() const { return 0; } virtual std::locale locale() const { return std::locale(); }
}; };
template <typename T> template <typename T>
@ -2616,11 +2616,9 @@ void basic_writer<Char>::write_int(T value, Spec spec) {
} }
case 'n': { case 'n': {
unsigned num_digits = internal::count_digits(abs_value); unsigned num_digits = internal::count_digits(abs_value);
const std::locale *loc = buffer_.locale(); std::locale loc = buffer_.locale();
if (!loc)
loc = &std::locale::classic();
Char thousands_sep = Char thousands_sep =
std::use_facet<std::numpunct<Char>>(*loc).thousands_sep(); std::use_facet<std::numpunct<Char>>(loc).thousands_sep();
fmt::basic_string_view<Char> sep(&thousands_sep, 1); fmt::basic_string_view<Char> sep(&thousands_sep, 1);
unsigned size = static_cast<unsigned>( unsigned size = static_cast<unsigned>(
num_digits + sep.size() * ((num_digits - 1) / 3)); num_digits + sep.size() * ((num_digits - 1) / 3));