xref: /aosp_15_r20/external/fmtlib/ChangeLog.md (revision 5c90c05cd622c0a81b57953a4d343e0e489f2e08)
1*5c90c05cSAndroid Build Coastguard Worker# 11.1.0 - TBD
2*5c90c05cSAndroid Build Coastguard Worker
3*5c90c05cSAndroid Build Coastguard Worker- Improved debug codegen.
4*5c90c05cSAndroid Build Coastguard Worker
5*5c90c05cSAndroid Build Coastguard Worker# 11.0.2 - 2024-07-20
6*5c90c05cSAndroid Build Coastguard Worker
7*5c90c05cSAndroid Build Coastguard Worker- Fixed compatibility with non-POSIX systems
8*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/4054,
9*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/4060).
10*5c90c05cSAndroid Build Coastguard Worker
11*5c90c05cSAndroid Build Coastguard Worker- Fixed performance regressions when using `std::back_insert_iterator` with
12*5c90c05cSAndroid Build Coastguard Worker  `fmt::format_to` (https://github.com/fmtlib/fmt/issues/4070).
13*5c90c05cSAndroid Build Coastguard Worker
14*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of `std::generator` and move-only iterators
15*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/4053,
16*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4057). Thanks @Arghnews.
17*5c90c05cSAndroid Build Coastguard Worker
18*5c90c05cSAndroid Build Coastguard Worker- Made `formatter<std::string_view>::parse` work with types convertible to
19*5c90c05cSAndroid Build Coastguard Worker  `std::string_view` (https://github.com/fmtlib/fmt/issues/4036,
20*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4055). Thanks @Arghnews.
21*5c90c05cSAndroid Build Coastguard Worker
22*5c90c05cSAndroid Build Coastguard Worker- Made `volatile void*` formattable
23*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/4049,
24*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4056). Thanks @Arghnews.
25*5c90c05cSAndroid Build Coastguard Worker
26*5c90c05cSAndroid Build Coastguard Worker- Made `Glib::ustring` not be confused with `std::string`
27*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/4052).
28*5c90c05cSAndroid Build Coastguard Worker
29*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::context` iterator compatible with STL algorithms that rely on
30*5c90c05cSAndroid Build Coastguard Worker  iterator category (https://github.com/fmtlib/fmt/issues/4079).
31*5c90c05cSAndroid Build Coastguard Worker
32*5c90c05cSAndroid Build Coastguard Worker# 11.0.1 - 2024-07-05
33*5c90c05cSAndroid Build Coastguard Worker
34*5c90c05cSAndroid Build Coastguard Worker- Fixed version number in the inline namespace
35*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/4047).
36*5c90c05cSAndroid Build Coastguard Worker
37*5c90c05cSAndroid Build Coastguard Worker- Fixed disabling Unicode support via CMake
38*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/4051).
39*5c90c05cSAndroid Build Coastguard Worker
40*5c90c05cSAndroid Build Coastguard Worker- Fixed deprecated `visit_format_arg` (https://github.com/fmtlib/fmt/pull/4043).
41*5c90c05cSAndroid Build Coastguard Worker  Thanks @nebkat.
42*5c90c05cSAndroid Build Coastguard Worker
43*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of a sign and improved the `std::complex` formater
44*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/4034,
45*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4050). Thanks @tesch1 and @phprus.
46*5c90c05cSAndroid Build Coastguard Worker
47*5c90c05cSAndroid Build Coastguard Worker- Fixed ADL issues in `fmt::printf` when using C++20
48*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/4042). Thanks @toge.
49*5c90c05cSAndroid Build Coastguard Worker
50*5c90c05cSAndroid Build Coastguard Worker- Removed a redundant check in the formatter for `std::expected`
51*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/4040). Thanks @phprus.
52*5c90c05cSAndroid Build Coastguard Worker
53*5c90c05cSAndroid Build Coastguard Worker# 11.0.0 - 2024-07-01
54*5c90c05cSAndroid Build Coastguard Worker
55*5c90c05cSAndroid Build Coastguard Worker- Added `fmt/base.h` which provides a subset of the API with minimal include
56*5c90c05cSAndroid Build Coastguard Worker  dependencies and enough functionality to replace all uses of the `printf`
57*5c90c05cSAndroid Build Coastguard Worker  family of functions. This brings the compile time of code using {fmt} much
58*5c90c05cSAndroid Build Coastguard Worker  closer to the equivalent `printf` code as shown on the following benchmark
59*5c90c05cSAndroid Build Coastguard Worker  that compiles 100 source files:
60*5c90c05cSAndroid Build Coastguard Worker
61*5c90c05cSAndroid Build Coastguard Worker  | Method       | Compile Time (s) |
62*5c90c05cSAndroid Build Coastguard Worker  |--------------|------------------|
63*5c90c05cSAndroid Build Coastguard Worker  | printf       | 1.6              |
64*5c90c05cSAndroid Build Coastguard Worker  | IOStreams    | 25.9             |
65*5c90c05cSAndroid Build Coastguard Worker  | fmt 10.x     | 19.0             |
66*5c90c05cSAndroid Build Coastguard Worker  | fmt 11.0     | 4.8              |
67*5c90c05cSAndroid Build Coastguard Worker  | tinyformat   | 29.1             |
68*5c90c05cSAndroid Build Coastguard Worker  | Boost Format | 55.0             |
69*5c90c05cSAndroid Build Coastguard Worker
70*5c90c05cSAndroid Build Coastguard Worker  This gives almost 4x improvement in build speed compared to version 10.
71*5c90c05cSAndroid Build Coastguard Worker  Note that the benchmark is purely formatting code and includes. In real
72*5c90c05cSAndroid Build Coastguard Worker  projects the difference from `printf` will be smaller partly because common
73*5c90c05cSAndroid Build Coastguard Worker  standard headers will be included in almost any translation unit (TU) anyway.
74*5c90c05cSAndroid Build Coastguard Worker  In particular, in every case except `printf` above ~1s is spent in total on
75*5c90c05cSAndroid Build Coastguard Worker  including `<type_traits>` in all TUs.
76*5c90c05cSAndroid Build Coastguard Worker
77*5c90c05cSAndroid Build Coastguard Worker- Optimized includes in other headers such as `fmt/format.h` which is now
78*5c90c05cSAndroid Build Coastguard Worker  roughly equivalent to the old `fmt/core.h` in terms of build speed.
79*5c90c05cSAndroid Build Coastguard Worker
80*5c90c05cSAndroid Build Coastguard Worker- Migrated the documentation at https://fmt.dev/ from Sphinx to MkDocs.
81*5c90c05cSAndroid Build Coastguard Worker
82*5c90c05cSAndroid Build Coastguard Worker- Improved C++20 module support
83*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3990,
84*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3991,
85*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3993,
86*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3994,
87*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3997,
88*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3998,
89*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4004,
90*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4005,
91*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4006,
92*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4013,
93*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4027,
94*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4029). In particular, native CMake support
95*5c90c05cSAndroid Build Coastguard Worker  for modules is now used if available. Thanks @yujincheng08 and @matt77hias.
96*5c90c05cSAndroid Build Coastguard Worker
97*5c90c05cSAndroid Build Coastguard Worker- Added an option to replace standard includes with `import std` enabled via
98*5c90c05cSAndroid Build Coastguard Worker  the `FMT_IMPORT_STD` macro (https://github.com/fmtlib/fmt/issues/3921,
99*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3928). Thanks @matt77hias.
100*5c90c05cSAndroid Build Coastguard Worker
101*5c90c05cSAndroid Build Coastguard Worker- Exported `fmt::range_format`, `fmt::range_format_kind` and
102*5c90c05cSAndroid Build Coastguard Worker  `fmt::compiled_string` from the `fmt` module
103*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3970,
104*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3999).
105*5c90c05cSAndroid Build Coastguard Worker  Thanks @matt77hias and @yujincheng08.
106*5c90c05cSAndroid Build Coastguard Worker
107*5c90c05cSAndroid Build Coastguard Worker- Improved integration with stdio in `fmt::print`, enabling direct writes
108*5c90c05cSAndroid Build Coastguard Worker  into a C stream buffer in common cases. This may give significant
109*5c90c05cSAndroid Build Coastguard Worker  performance improvements ranging from tens of percent to [2x](
110*5c90c05cSAndroid Build Coastguard Worker  https://stackoverflow.com/a/78457454/471164) and eliminates dynamic memory
111*5c90c05cSAndroid Build Coastguard Worker  allocations on the buffer level. It is currently enabled for built-in and
112*5c90c05cSAndroid Build Coastguard Worker  string types with wider availability coming up in future releases.
113*5c90c05cSAndroid Build Coastguard Worker
114*5c90c05cSAndroid Build Coastguard Worker  For example, it gives ~24% improvement on a [simple benchmark](
115*5c90c05cSAndroid Build Coastguard Worker  https://isocpp.org/files/papers/P3107R5.html#perf) compiled with Apple clang
116*5c90c05cSAndroid Build Coastguard Worker  version 15.0.0 (clang-1500.1.0.2.5) and run on macOS 14.2.1:
117*5c90c05cSAndroid Build Coastguard Worker
118*5c90c05cSAndroid Build Coastguard Worker  ```
119*5c90c05cSAndroid Build Coastguard Worker  -------------------------------------------------------
120*5c90c05cSAndroid Build Coastguard Worker  Benchmark             Time             CPU   Iterations
121*5c90c05cSAndroid Build Coastguard Worker  -------------------------------------------------------
122*5c90c05cSAndroid Build Coastguard Worker  printf             81.8 ns         81.5 ns      8496899
123*5c90c05cSAndroid Build Coastguard Worker  fmt::print (10.x)  63.8 ns         61.9 ns     11524151
124*5c90c05cSAndroid Build Coastguard Worker  fmt::print (11.0)  51.3 ns         51.0 ns     13846580
125*5c90c05cSAndroid Build Coastguard Worker  ```
126*5c90c05cSAndroid Build Coastguard Worker
127*5c90c05cSAndroid Build Coastguard Worker- Improved safety of `fmt::format_to` when writing to an array
128*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3805).
129*5c90c05cSAndroid Build Coastguard Worker  For example ([godbolt](https://www.godbolt.org/z/cYrn8dWY8)):
130*5c90c05cSAndroid Build Coastguard Worker
131*5c90c05cSAndroid Build Coastguard Worker  ```c++
132*5c90c05cSAndroid Build Coastguard Worker  auto volkswagen = char[4];
133*5c90c05cSAndroid Build Coastguard Worker  auto result = fmt::format_to(volkswagen, "elephant");
134*5c90c05cSAndroid Build Coastguard Worker  ```
135*5c90c05cSAndroid Build Coastguard Worker
136*5c90c05cSAndroid Build Coastguard Worker  no longer results in a buffer overflow. Instead the output will be truncated
137*5c90c05cSAndroid Build Coastguard Worker  and you can get the end iterator and whether truncation occurred from the
138*5c90c05cSAndroid Build Coastguard Worker  `result` object. Thanks @ThePhD.
139*5c90c05cSAndroid Build Coastguard Worker
140*5c90c05cSAndroid Build Coastguard Worker- Enabled Unicode support by default in MSVC, bringing it on par with other
141*5c90c05cSAndroid Build Coastguard Worker  compilers and making it unnecessary for users to enable it explicitly.
142*5c90c05cSAndroid Build Coastguard Worker  Most of {fmt} is encoding-agnostic but this prevents mojibake in places
143*5c90c05cSAndroid Build Coastguard Worker  where encoding matters such as path formatting and terminal output.
144*5c90c05cSAndroid Build Coastguard Worker  You can control the Unicode support via the CMake `FMT_UNICODE` option.
145*5c90c05cSAndroid Build Coastguard Worker  Note that some {fmt} packages such as the one in vcpkg have already been
146*5c90c05cSAndroid Build Coastguard Worker  compiled with Unicode enabled.
147*5c90c05cSAndroid Build Coastguard Worker
148*5c90c05cSAndroid Build Coastguard Worker- Added a formatter for `std::expected`
149*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3834). Thanks @dominicpoeschko.
150*5c90c05cSAndroid Build Coastguard Worker
151*5c90c05cSAndroid Build Coastguard Worker- Added a formatter for `std::complex`
152*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1467,
153*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3886,
154*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3892,
155*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3900). Thanks @phprus.
156*5c90c05cSAndroid Build Coastguard Worker
157*5c90c05cSAndroid Build Coastguard Worker- Added a formatter for `std::type_info`
158*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3978). Thanks @matt77hias.
159*5c90c05cSAndroid Build Coastguard Worker
160*5c90c05cSAndroid Build Coastguard Worker- Specialized `formatter` for `std::basic_string` types with custom traits
161*5c90c05cSAndroid Build Coastguard Worker  and allocators (https://github.com/fmtlib/fmt/issues/3938,
162*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3943). Thanks @dieram3.
163*5c90c05cSAndroid Build Coastguard Worker
164*5c90c05cSAndroid Build Coastguard Worker- Added formatters for `std::chrono::day`, `std::chrono::month`,
165*5c90c05cSAndroid Build Coastguard Worker  `std::chrono::year` and `std::chrono::year_month_day`
166*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3758,
167*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3772,
168*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3906,
169*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3913). For example:
170*5c90c05cSAndroid Build Coastguard Worker
171*5c90c05cSAndroid Build Coastguard Worker  ```c++
172*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
173*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/color.h>
174*5c90c05cSAndroid Build Coastguard Worker
175*5c90c05cSAndroid Build Coastguard Worker  int main() {
176*5c90c05cSAndroid Build Coastguard Worker    fmt::print(fg(fmt::color::green), "{}\n", std::chrono::day(7));
177*5c90c05cSAndroid Build Coastguard Worker  }
178*5c90c05cSAndroid Build Coastguard Worker  ```
179*5c90c05cSAndroid Build Coastguard Worker
180*5c90c05cSAndroid Build Coastguard Worker  prints a green day:
181*5c90c05cSAndroid Build Coastguard Worker
182*5c90c05cSAndroid Build Coastguard Worker  <img width="306" alt="image" src="https://github.com/fmtlib/fmt/assets/576385/6e395f8b-451a-4cf7-bccc-ee92ca0dec65">
183*5c90c05cSAndroid Build Coastguard Worker
184*5c90c05cSAndroid Build Coastguard Worker  Thanks @zivshek.
185*5c90c05cSAndroid Build Coastguard Worker
186*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of precision in `%S` (https://github.com/fmtlib/fmt/issues/3794,
187*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3814). Thanks @js324.
188*5c90c05cSAndroid Build Coastguard Worker
189*5c90c05cSAndroid Build Coastguard Worker- Added support for the `-` specifier (glibc `strftime` extension) to day of
190*5c90c05cSAndroid Build Coastguard Worker  the month (`%d`) and week of the year (`%W`, `%U`, `%V`) specifiers
191*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3976). Thanks @ZaheenJ.
192*5c90c05cSAndroid Build Coastguard Worker
193*5c90c05cSAndroid Build Coastguard Worker- Fixed the scope of the `-` extension in chrono formatting so that it doesn't
194*5c90c05cSAndroid Build Coastguard Worker  apply to subsequent specifiers (https://github.com/fmtlib/fmt/issues/3811,
195*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3812). Thanks @phprus.
196*5c90c05cSAndroid Build Coastguard Worker
197*5c90c05cSAndroid Build Coastguard Worker- Improved handling of `time_point::min()`
198*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3282).
199*5c90c05cSAndroid Build Coastguard Worker
200*5c90c05cSAndroid Build Coastguard Worker- Added support for character range formatting
201*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3857,
202*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3863). Thanks @js324.
203*5c90c05cSAndroid Build Coastguard Worker
204*5c90c05cSAndroid Build Coastguard Worker- Added `string` and `debug_string` range formatters
205*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3973,
206*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4024). Thanks @matt77hias.
207*5c90c05cSAndroid Build Coastguard Worker
208*5c90c05cSAndroid Build Coastguard Worker- Enabled ADL for `begin` and `end` in `fmt::join`
209*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3813,
210*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3824). Thanks @bbolli.
211*5c90c05cSAndroid Build Coastguard Worker
212*5c90c05cSAndroid Build Coastguard Worker- Made contiguous iterator optimizations apply to `std::basic_string` iterators
213*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3798). Thanks @phprus.
214*5c90c05cSAndroid Build Coastguard Worker
215*5c90c05cSAndroid Build Coastguard Worker- Added support for ranges with mutable `begin` and `end`
216*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3752,
217*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3800,
218*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3955). Thanks @tcbrindle and @Arghnews.
219*5c90c05cSAndroid Build Coastguard Worker
220*5c90c05cSAndroid Build Coastguard Worker- Added support for move-only iterators to `fmt::join`
221*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3802,
222*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3946). Thanks @Arghnews.
223*5c90c05cSAndroid Build Coastguard Worker
224*5c90c05cSAndroid Build Coastguard Worker- Moved range and iterator overloads of `fmt::join` to `fmt/ranges.h`, next
225*5c90c05cSAndroid Build Coastguard Worker  to other overloads.
226*5c90c05cSAndroid Build Coastguard Worker
227*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of types with `begin` returning `void` such as Eigen matrices
228*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3839,
229*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3964). Thanks @Arghnews.
230*5c90c05cSAndroid Build Coastguard Worker
231*5c90c05cSAndroid Build Coastguard Worker- Added an `fmt::formattable` concept (https://github.com/fmtlib/fmt/pull/3974).
232*5c90c05cSAndroid Build Coastguard Worker  Thanks @matt77hias.
233*5c90c05cSAndroid Build Coastguard Worker
234*5c90c05cSAndroid Build Coastguard Worker- Added support for `__float128` (https://github.com/fmtlib/fmt/issues/3494).
235*5c90c05cSAndroid Build Coastguard Worker
236*5c90c05cSAndroid Build Coastguard Worker- Fixed rounding issues when formatting `long double` with fixed precision
237*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3539).
238*5c90c05cSAndroid Build Coastguard Worker
239*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::isnan` not trigger floating-point exception for NaN values
240*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3948,
241*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3951). Thanks @alexdewar.
242*5c90c05cSAndroid Build Coastguard Worker
243*5c90c05cSAndroid Build Coastguard Worker- Removed dependency on `<memory>` for `std::allocator_traits` when possible
244*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3804). Thanks @phprus.
245*5c90c05cSAndroid Build Coastguard Worker
246*5c90c05cSAndroid Build Coastguard Worker- Enabled compile-time checks in formatting functions that take text colors and
247*5c90c05cSAndroid Build Coastguard Worker  styles.
248*5c90c05cSAndroid Build Coastguard Worker
249*5c90c05cSAndroid Build Coastguard Worker- Deprecated wide stream overloads of `fmt::print` that take text styles.
250*5c90c05cSAndroid Build Coastguard Worker
251*5c90c05cSAndroid Build Coastguard Worker- Made format string compilation work with clang 12 and later despite
252*5c90c05cSAndroid Build Coastguard Worker  only partial non-type template parameter support
253*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/4000,
254*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4001). Thanks @yujincheng08.
255*5c90c05cSAndroid Build Coastguard Worker
256*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::iterator_buffer`'s move constructor `noexcept`
257*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3808). Thanks @waywardmonkeys.
258*5c90c05cSAndroid Build Coastguard Worker
259*5c90c05cSAndroid Build Coastguard Worker- Started enforcing that `formatter::format` is const for compatibility
260*5c90c05cSAndroid Build Coastguard Worker  with `std::format` (https://github.com/fmtlib/fmt/issues/3447).
261*5c90c05cSAndroid Build Coastguard Worker
262*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::basic_format_arg::visit` and deprecated `fmt::visit_format_arg`.
263*5c90c05cSAndroid Build Coastguard Worker
264*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::basic_string_view` not constructible from `nullptr` for
265*5c90c05cSAndroid Build Coastguard Worker  consistency with `std::string_view` in C++23
266*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3846). Thanks @dalle.
267*5c90c05cSAndroid Build Coastguard Worker
268*5c90c05cSAndroid Build Coastguard Worker- Fixed `fmt::group_digits` for negative integers
269*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3891,
270*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3901). Thanks @phprus.
271*5c90c05cSAndroid Build Coastguard Worker
272*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of negative ids in `fmt::basic_format_args::get`
273*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3945). Thanks @marlenecota.
274*5c90c05cSAndroid Build Coastguard Worker
275*5c90c05cSAndroid Build Coastguard Worker- Improved named argument validation
276*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3817).
277*5c90c05cSAndroid Build Coastguard Worker
278*5c90c05cSAndroid Build Coastguard Worker- Disabled copy construction/assignment for `fmt::format_arg_store` and
279*5c90c05cSAndroid Build Coastguard Worker  fixed moved construction (https://github.com/fmtlib/fmt/pull/3833).
280*5c90c05cSAndroid Build Coastguard Worker  Thanks @ivafanas.
281*5c90c05cSAndroid Build Coastguard Worker
282*5c90c05cSAndroid Build Coastguard Worker- Worked around a locale issue in RHEL/devtoolset
283*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3858,
284*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3859). Thanks @g199209.
285*5c90c05cSAndroid Build Coastguard Worker
286*5c90c05cSAndroid Build Coastguard Worker- Added RTTI detection for MSVC (https://github.com/fmtlib/fmt/pull/3821,
287*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3963). Thanks @edo9300.
288*5c90c05cSAndroid Build Coastguard Worker
289*5c90c05cSAndroid Build Coastguard Worker- Migrated the documentation from Sphinx to MkDocs.
290*5c90c05cSAndroid Build Coastguard Worker
291*5c90c05cSAndroid Build Coastguard Worker- Improved documentation and README
292*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3775,
293*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3784,
294*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3788,
295*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3789,
296*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3793,
297*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3818,
298*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3820,
299*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3822,
300*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3843,
301*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3890,
302*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3894,
303*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3895,
304*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3905,
305*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3942,
306*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4008).
307*5c90c05cSAndroid Build Coastguard Worker  Thanks @zencatalyst, WolleTD, @tupaschoal, @Dobiasd, @frank-weinberg, @bbolli,
308*5c90c05cSAndroid Build Coastguard Worker  @phprus, @waywardmonkeys, @js324 and @tchaikov.
309*5c90c05cSAndroid Build Coastguard Worker
310*5c90c05cSAndroid Build Coastguard Worker- Improved CI and tests
311*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3878,
312*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3883,
313*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3897,
314*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3979,
315*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3980,
316*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3988,
317*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4010,
318*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4012,
319*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4038).
320*5c90c05cSAndroid Build Coastguard Worker  Thanks @vgorrX, @waywardmonkeys, @tchaikov and @phprus.
321*5c90c05cSAndroid Build Coastguard Worker
322*5c90c05cSAndroid Build Coastguard Worker- Fixed buffer overflow when using format string compilation with debug format
323*5c90c05cSAndroid Build Coastguard Worker  and `std::back_insert_iterator` (https://github.com/fmtlib/fmt/issues/3795,
324*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3797). Thanks @phprus.
325*5c90c05cSAndroid Build Coastguard Worker
326*5c90c05cSAndroid Build Coastguard Worker- Improved Bazel support
327*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3792,
328*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3801,
329*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3962,
330*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3965). Thanks @Vertexwahn.
331*5c90c05cSAndroid Build Coastguard Worker
332*5c90c05cSAndroid Build Coastguard Worker- Improved/fixed the CMake config
333*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3777,
334*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3783,
335*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3847,
336*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3907). Thanks @phprus and @xTachyon.
337*5c90c05cSAndroid Build Coastguard Worker
338*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
339*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3685,
340*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3769,
341*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3796,
342*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3803,
343*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3806,
344*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3807,
345*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3809,
346*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3810,
347*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3830,
348*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3832,
349*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3835,
350*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3844,
351*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3854,
352*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3856,
353*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3865,
354*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3866,
355*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3880,
356*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3881,
357*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3884,
358*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3898,
359*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3899,
360*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3909,
361*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3917,
362*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3923,
363*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3924,
364*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3925,
365*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3930,
366*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3931,
367*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3933,
368*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3935,
369*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3937,
370*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3967,
371*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3968,
372*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3972,
373*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3983,
374*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3992,
375*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3995,
376*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4009,
377*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4023).
378*5c90c05cSAndroid Build Coastguard Worker  Thanks @hmbj, @phprus, @res2k, @Baardi, @matt77hias, @waywardmonkeys, @hmbj,
379*5c90c05cSAndroid Build Coastguard Worker  @yakra, @prlw1, @Arghnews, @mtillmann0, @ShifftC, @eepp, @jimmy-park and
380*5c90c05cSAndroid Build Coastguard Worker  @ChristianGebhardt.
381*5c90c05cSAndroid Build Coastguard Worker
382*5c90c05cSAndroid Build Coastguard Worker# 10.2.1 - 2024-01-04
383*5c90c05cSAndroid Build Coastguard Worker
384*5c90c05cSAndroid Build Coastguard Worker- Fixed ABI compatibility with earlier 10.x versions
385*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3785,
386*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3786). Thanks @saraedum.
387*5c90c05cSAndroid Build Coastguard Worker
388*5c90c05cSAndroid Build Coastguard Worker# 10.2.0 - 2024-01-01
389*5c90c05cSAndroid Build Coastguard Worker
390*5c90c05cSAndroid Build Coastguard Worker- Added support for the `%j` specifier (the number of days) for
391*5c90c05cSAndroid Build Coastguard Worker  `std::chrono::duration` (https://github.com/fmtlib/fmt/issues/3643,
392*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3732). Thanks @intelfx.
393*5c90c05cSAndroid Build Coastguard Worker
394*5c90c05cSAndroid Build Coastguard Worker- Added support for the chrono suffix for days and changed
395*5c90c05cSAndroid Build Coastguard Worker  the suffix for minutes from "m" to the correct "min"
396*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3662,
397*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3664).
398*5c90c05cSAndroid Build Coastguard Worker  For example ([godbolt](https://godbolt.org/z/9KhMnq9ba)):
399*5c90c05cSAndroid Build Coastguard Worker
400*5c90c05cSAndroid Build Coastguard Worker  ```c++
401*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
402*5c90c05cSAndroid Build Coastguard Worker
403*5c90c05cSAndroid Build Coastguard Worker  int main() {
404*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}\n", std::chrono::days(42)); // prints "42d"
405*5c90c05cSAndroid Build Coastguard Worker  }
406*5c90c05cSAndroid Build Coastguard Worker  ```
407*5c90c05cSAndroid Build Coastguard Worker
408*5c90c05cSAndroid Build Coastguard Worker  Thanks @Richardk2n.
409*5c90c05cSAndroid Build Coastguard Worker
410*5c90c05cSAndroid Build Coastguard Worker- Fixed an overflow in `std::chrono::time_point` formatting with large dates
411*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3725,
412*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3727). Thanks @cschreib.
413*5c90c05cSAndroid Build Coastguard Worker
414*5c90c05cSAndroid Build Coastguard Worker- Added a formatter for `std::source_location`
415*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3730).
416*5c90c05cSAndroid Build Coastguard Worker  For example ([godbolt](https://godbolt.org/z/YajfKjhhr)):
417*5c90c05cSAndroid Build Coastguard Worker
418*5c90c05cSAndroid Build Coastguard Worker  ```c++
419*5c90c05cSAndroid Build Coastguard Worker  #include <source_location>
420*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/std.h>
421*5c90c05cSAndroid Build Coastguard Worker
422*5c90c05cSAndroid Build Coastguard Worker  int main() {
423*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}\n", std::source_location::current());
424*5c90c05cSAndroid Build Coastguard Worker  }
425*5c90c05cSAndroid Build Coastguard Worker  ```
426*5c90c05cSAndroid Build Coastguard Worker
427*5c90c05cSAndroid Build Coastguard Worker  prints
428*5c90c05cSAndroid Build Coastguard Worker
429*5c90c05cSAndroid Build Coastguard Worker  ```
430*5c90c05cSAndroid Build Coastguard Worker  /app/example.cpp:5:51: int main()
431*5c90c05cSAndroid Build Coastguard Worker  ```
432*5c90c05cSAndroid Build Coastguard Worker
433*5c90c05cSAndroid Build Coastguard Worker  Thanks @felix642.
434*5c90c05cSAndroid Build Coastguard Worker
435*5c90c05cSAndroid Build Coastguard Worker- Added a formatter for `std::bitset`
436*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3660).
437*5c90c05cSAndroid Build Coastguard Worker  For example ([godbolt](https://godbolt.org/z/bdEaGeYxe)):
438*5c90c05cSAndroid Build Coastguard Worker
439*5c90c05cSAndroid Build Coastguard Worker  ```c++
440*5c90c05cSAndroid Build Coastguard Worker  #include <bitset>
441*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/std.h>
442*5c90c05cSAndroid Build Coastguard Worker
443*5c90c05cSAndroid Build Coastguard Worker  int main() {
444*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}\n", std::bitset<6>(42)); // prints "101010"
445*5c90c05cSAndroid Build Coastguard Worker  }
446*5c90c05cSAndroid Build Coastguard Worker  ```
447*5c90c05cSAndroid Build Coastguard Worker
448*5c90c05cSAndroid Build Coastguard Worker  Thanks @muggenhor.
449*5c90c05cSAndroid Build Coastguard Worker
450*5c90c05cSAndroid Build Coastguard Worker- Added an experimental `nested_formatter` that provides an easy way of
451*5c90c05cSAndroid Build Coastguard Worker  applying a formatter to one or more subobjects while automatically handling
452*5c90c05cSAndroid Build Coastguard Worker  width, fill and alignment. For example:
453*5c90c05cSAndroid Build Coastguard Worker
454*5c90c05cSAndroid Build Coastguard Worker  ```c++
455*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
456*5c90c05cSAndroid Build Coastguard Worker
457*5c90c05cSAndroid Build Coastguard Worker  struct point {
458*5c90c05cSAndroid Build Coastguard Worker    double x, y;
459*5c90c05cSAndroid Build Coastguard Worker  };
460*5c90c05cSAndroid Build Coastguard Worker
461*5c90c05cSAndroid Build Coastguard Worker  template <>
462*5c90c05cSAndroid Build Coastguard Worker  struct fmt::formatter<point> : nested_formatter<double> {
463*5c90c05cSAndroid Build Coastguard Worker    auto format(point p, format_context& ctx) const {
464*5c90c05cSAndroid Build Coastguard Worker      return write_padded(ctx, [=](auto out) {
465*5c90c05cSAndroid Build Coastguard Worker        return format_to(out, "({}, {})", nested(p.x), nested(p.y));
466*5c90c05cSAndroid Build Coastguard Worker      });
467*5c90c05cSAndroid Build Coastguard Worker    }
468*5c90c05cSAndroid Build Coastguard Worker  };
469*5c90c05cSAndroid Build Coastguard Worker
470*5c90c05cSAndroid Build Coastguard Worker  int main() {
471*5c90c05cSAndroid Build Coastguard Worker    fmt::print("[{:>20.2f}]", point{1, 2});
472*5c90c05cSAndroid Build Coastguard Worker  }
473*5c90c05cSAndroid Build Coastguard Worker  ```
474*5c90c05cSAndroid Build Coastguard Worker
475*5c90c05cSAndroid Build Coastguard Worker  prints
476*5c90c05cSAndroid Build Coastguard Worker
477*5c90c05cSAndroid Build Coastguard Worker  ```
478*5c90c05cSAndroid Build Coastguard Worker  [          (1.00, 2.00)]
479*5c90c05cSAndroid Build Coastguard Worker  ```
480*5c90c05cSAndroid Build Coastguard Worker
481*5c90c05cSAndroid Build Coastguard Worker- Added the generic representation (`g`) to `std::filesystem::path`
482*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3715,
483*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3729). For example:
484*5c90c05cSAndroid Build Coastguard Worker
485*5c90c05cSAndroid Build Coastguard Worker  ```c++
486*5c90c05cSAndroid Build Coastguard Worker  #include <filesystem>
487*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/std.h>
488*5c90c05cSAndroid Build Coastguard Worker
489*5c90c05cSAndroid Build Coastguard Worker  int main() {
490*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:g}\n", std::filesystem::path("C:\\foo"));
491*5c90c05cSAndroid Build Coastguard Worker  }
492*5c90c05cSAndroid Build Coastguard Worker  ```
493*5c90c05cSAndroid Build Coastguard Worker
494*5c90c05cSAndroid Build Coastguard Worker  prints `"C:/foo"` on Windows.
495*5c90c05cSAndroid Build Coastguard Worker
496*5c90c05cSAndroid Build Coastguard Worker  Thanks @js324.
497*5c90c05cSAndroid Build Coastguard Worker
498*5c90c05cSAndroid Build Coastguard Worker- Made `format_as` work with references
499*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3739). Thanks @tchaikov.
500*5c90c05cSAndroid Build Coastguard Worker
501*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of invalid UTF-8 with precision
502*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3284).
503*5c90c05cSAndroid Build Coastguard Worker
504*5c90c05cSAndroid Build Coastguard Worker- Fixed an inconsistency between `fmt::to_string` and `fmt::format`
505*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3684).
506*5c90c05cSAndroid Build Coastguard Worker
507*5c90c05cSAndroid Build Coastguard Worker- Disallowed unsafe uses of `fmt::styled`
508*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3625):
509*5c90c05cSAndroid Build Coastguard Worker
510*5c90c05cSAndroid Build Coastguard Worker  ```c++
511*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::styled(std::string("dangle"), fmt::emphasis::bold);
512*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{}\n", s); // compile error
513*5c90c05cSAndroid Build Coastguard Worker  ```
514*5c90c05cSAndroid Build Coastguard Worker
515*5c90c05cSAndroid Build Coastguard Worker  Pass `fmt::styled(...)` as a parameter instead.
516*5c90c05cSAndroid Build Coastguard Worker
517*5c90c05cSAndroid Build Coastguard Worker- Added a null check when formatting a C string with the `s` specifier
518*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3706).
519*5c90c05cSAndroid Build Coastguard Worker
520*5c90c05cSAndroid Build Coastguard Worker- Disallowed the `c` specifier for `bool`
521*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3726,
522*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3734). Thanks @js324.
523*5c90c05cSAndroid Build Coastguard Worker
524*5c90c05cSAndroid Build Coastguard Worker- Made the default formatting unlocalized in `fmt::ostream_formatter` for
525*5c90c05cSAndroid Build Coastguard Worker  consistency with the rest of the library
526*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3460).
527*5c90c05cSAndroid Build Coastguard Worker
528*5c90c05cSAndroid Build Coastguard Worker- Fixed localized formatting in bases other than decimal
529*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3693,
530*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3750). Thanks @js324.
531*5c90c05cSAndroid Build Coastguard Worker
532*5c90c05cSAndroid Build Coastguard Worker- Fixed a performance regression in experimental `fmt::ostream::print`
533*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3674).
534*5c90c05cSAndroid Build Coastguard Worker
535*5c90c05cSAndroid Build Coastguard Worker- Added synchronization with the underlying output stream when writing to
536*5c90c05cSAndroid Build Coastguard Worker  the Windows console
537*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3668,
538*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3688,
539*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3689).
540*5c90c05cSAndroid Build Coastguard Worker  Thanks @Roman-Koshelev and @dimztimz.
541*5c90c05cSAndroid Build Coastguard Worker
542*5c90c05cSAndroid Build Coastguard Worker- Changed to only export `format_error` when {fmt} is built as a shared
543*5c90c05cSAndroid Build Coastguard Worker  library (https://github.com/fmtlib/fmt/issues/3626,
544*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3627). Thanks @phprus.
545*5c90c05cSAndroid Build Coastguard Worker
546*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::streamed` `constexpr`.
547*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3650). Thanks @muggenhor.
548*5c90c05cSAndroid Build Coastguard Worker
549*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::format_int` `constexpr`
550*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/4031,
551*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4032). Thanks @dixlorenz.
552*5c90c05cSAndroid Build Coastguard Worker
553*5c90c05cSAndroid Build Coastguard Worker- Enabled `consteval` on older versions of MSVC
554*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3757). Thanks @phprus.
555*5c90c05cSAndroid Build Coastguard Worker
556*5c90c05cSAndroid Build Coastguard Worker- Added an option to build without `wchar_t` support on Windows
557*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3631,
558*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3636). Thanks @glebm.
559*5c90c05cSAndroid Build Coastguard Worker
560*5c90c05cSAndroid Build Coastguard Worker- Improved build and CI configuration
561*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3679,
562*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3701,
563*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3702,
564*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3749).
565*5c90c05cSAndroid Build Coastguard Worker  Thanks @jcar87, @pklima and @tchaikov.
566*5c90c05cSAndroid Build Coastguard Worker
567*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings, compilation and test issues
568*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3607,
569*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3610,
570*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3624,
571*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3630,
572*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3634,
573*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3638,
574*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3645,
575*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3646,
576*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3647,
577*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3652,
578*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3654,
579*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3663,
580*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3670,
581*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3680,
582*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3694,
583*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3695,
584*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3699,
585*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3705,
586*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3710,
587*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3712,
588*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3713,
589*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3714,
590*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3716,
591*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3723,
592*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3738,
593*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3740,
594*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3741,
595*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3743,
596*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3745,
597*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3747,
598*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3748,
599*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3751,
600*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3754,
601*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3755,
602*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3760,
603*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3762,
604*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3763,
605*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3764,
606*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3774,
607*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3779).
608*5c90c05cSAndroid Build Coastguard Worker  Thanks @danakj, @vinayyadav3016, @cyyever, @phprus, @qimiko, @saschasc,
609*5c90c05cSAndroid Build Coastguard Worker  @gsjaardema, @lazka, @Zhaojun-Liu, @carlsmedstad, @hotwatermorning,
610*5c90c05cSAndroid Build Coastguard Worker  @cptFracassa, @kuguma, @PeterJohnson, @H1X4Dev, @asantoni, @eltociear,
611*5c90c05cSAndroid Build Coastguard Worker  @msimberg, @tchaikov, @waywardmonkeys.
612*5c90c05cSAndroid Build Coastguard Worker
613*5c90c05cSAndroid Build Coastguard Worker- Improved documentation and README
614*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2086,
615*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3637,
616*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3642,
617*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3653,
618*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3655,
619*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3661,
620*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3673,
621*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3677,
622*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3737,
623*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3742,
624*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3744).
625*5c90c05cSAndroid Build Coastguard Worker  Thanks @idzm, @perlun, @joycebrum, @fennewald, @reinhardt1053, @GeorgeLS.
626*5c90c05cSAndroid Build Coastguard Worker
627*5c90c05cSAndroid Build Coastguard Worker- Updated CI dependencies
628*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3615,
629*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3622,
630*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3623,
631*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3666,
632*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3696,
633*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3697,
634*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3759,
635*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3782).
636*5c90c05cSAndroid Build Coastguard Worker
637*5c90c05cSAndroid Build Coastguard Worker# 10.1.1 - 2023-08-28
638*5c90c05cSAndroid Build Coastguard Worker
639*5c90c05cSAndroid Build Coastguard Worker- Added formatters for `std::atomic` and `atomic_flag`
640*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3574,
641*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3594).
642*5c90c05cSAndroid Build Coastguard Worker  Thanks @wangzw and @AlexGuteniev.
643*5c90c05cSAndroid Build Coastguard Worker- Fixed an error about partial specialization of `formatter<string>`
644*5c90c05cSAndroid Build Coastguard Worker  after instantiation when compiled with gcc and C++20
645*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3584).
646*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation as a C++20 module with gcc and clang
647*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3587,
648*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3597,
649*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3605).
650*5c90c05cSAndroid Build Coastguard Worker  Thanks @MathewBensonCode.
651*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::to_string` work with types that have `format_as`
652*5c90c05cSAndroid Build Coastguard Worker  overloads (https://github.com/fmtlib/fmt/pull/3575). Thanks @phprus.
653*5c90c05cSAndroid Build Coastguard Worker- Made `formatted_size` work with integral format specifiers at
654*5c90c05cSAndroid Build Coastguard Worker  compile time (https://github.com/fmtlib/fmt/pull/3591).
655*5c90c05cSAndroid Build Coastguard Worker  Thanks @elbeno.
656*5c90c05cSAndroid Build Coastguard Worker- Fixed a warning about the `no_unique_address` attribute on clang-cl
657*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3599). Thanks @lukester1975.
658*5c90c05cSAndroid Build Coastguard Worker- Improved compatibility with the legacy GBK encoding
659*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3598,
660*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3599). Thanks @YuHuanTin.
661*5c90c05cSAndroid Build Coastguard Worker- Added OpenSSF Scorecard analysis
662*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3530,
663*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3571). Thanks @joycebrum.
664*5c90c05cSAndroid Build Coastguard Worker- Updated CI dependencies
665*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3591,
666*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3592,
667*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3593,
668*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3602).
669*5c90c05cSAndroid Build Coastguard Worker
670*5c90c05cSAndroid Build Coastguard Worker# 10.1.0 - 2023-08-12
671*5c90c05cSAndroid Build Coastguard Worker
672*5c90c05cSAndroid Build Coastguard Worker- Optimized format string compilation resulting in up to 40% speed up
673*5c90c05cSAndroid Build Coastguard Worker  in compiled `format_to` and \~4x speed up in compiled `format_to_n`
674*5c90c05cSAndroid Build Coastguard Worker  on a concatenation benchmark
675*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3133,
676*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3484).
677*5c90c05cSAndroid Build Coastguard Worker
678*5c90c05cSAndroid Build Coastguard Worker  {fmt} 10.0:
679*5c90c05cSAndroid Build Coastguard Worker
680*5c90c05cSAndroid Build Coastguard Worker      ---------------------------------------------------------
681*5c90c05cSAndroid Build Coastguard Worker      Benchmark               Time             CPU   Iterations
682*5c90c05cSAndroid Build Coastguard Worker      ---------------------------------------------------------
683*5c90c05cSAndroid Build Coastguard Worker      BM_format_to         78.9 ns         78.9 ns      8881746
684*5c90c05cSAndroid Build Coastguard Worker      BM_format_to_n        568 ns          568 ns      1232089
685*5c90c05cSAndroid Build Coastguard Worker
686*5c90c05cSAndroid Build Coastguard Worker  {fmt} 10.1:
687*5c90c05cSAndroid Build Coastguard Worker
688*5c90c05cSAndroid Build Coastguard Worker      ---------------------------------------------------------
689*5c90c05cSAndroid Build Coastguard Worker      Benchmark               Time             CPU   Iterations
690*5c90c05cSAndroid Build Coastguard Worker      ---------------------------------------------------------
691*5c90c05cSAndroid Build Coastguard Worker      BM_format_to         54.9 ns         54.9 ns     12727944
692*5c90c05cSAndroid Build Coastguard Worker      BM_format_to_n        133 ns          133 ns      5257795
693*5c90c05cSAndroid Build Coastguard Worker
694*5c90c05cSAndroid Build Coastguard Worker- Optimized storage of an empty allocator in `basic_memory_buffer`
695*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3485). Thanks @Minty-Meeo.
696*5c90c05cSAndroid Build Coastguard Worker
697*5c90c05cSAndroid Build Coastguard Worker- Added formatters for proxy references to elements of
698*5c90c05cSAndroid Build Coastguard Worker  `std::vector<bool>` and `std::bitset<N>`
699*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3567,
700*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3570). For example
701*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/zYb79Pvn8)):
702*5c90c05cSAndroid Build Coastguard Worker
703*5c90c05cSAndroid Build Coastguard Worker  ```c++
704*5c90c05cSAndroid Build Coastguard Worker  #include <vector>
705*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/std.h>
706*5c90c05cSAndroid Build Coastguard Worker
707*5c90c05cSAndroid Build Coastguard Worker  int main() {
708*5c90c05cSAndroid Build Coastguard Worker    auto v = std::vector<bool>{true};
709*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}", v[0]);
710*5c90c05cSAndroid Build Coastguard Worker  }
711*5c90c05cSAndroid Build Coastguard Worker  ```
712*5c90c05cSAndroid Build Coastguard Worker
713*5c90c05cSAndroid Build Coastguard Worker  Thanks @phprus and @felix642.
714*5c90c05cSAndroid Build Coastguard Worker
715*5c90c05cSAndroid Build Coastguard Worker- Fixed an ambiguous formatter specialization for containers that look
716*5c90c05cSAndroid Build Coastguard Worker  like container adaptors such as `boost::flat_set`
717*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3556,
718*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3561). Thanks @5chmidti.
719*5c90c05cSAndroid Build Coastguard Worker
720*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation when formatting durations not convertible from
721*5c90c05cSAndroid Build Coastguard Worker  `std::chrono::seconds`
722*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3430). Thanks @patlkli.
723*5c90c05cSAndroid Build Coastguard Worker
724*5c90c05cSAndroid Build Coastguard Worker- Made the `formatter` specialization for `char*` const-correct
725*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3432). Thanks @timsong-cpp.
726*5c90c05cSAndroid Build Coastguard Worker
727*5c90c05cSAndroid Build Coastguard Worker- Made `{}` and `{:}` handled consistently during compile-time checks
728*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3526).
729*5c90c05cSAndroid Build Coastguard Worker
730*5c90c05cSAndroid Build Coastguard Worker- Disallowed passing temporaries to `make_format_args` to improve API
731*5c90c05cSAndroid Build Coastguard Worker  safety by preventing dangling references.
732*5c90c05cSAndroid Build Coastguard Worker
733*5c90c05cSAndroid Build Coastguard Worker- Improved the compile-time error for unformattable types
734*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3478). Thanks @BRevzin.
735*5c90c05cSAndroid Build Coastguard Worker
736*5c90c05cSAndroid Build Coastguard Worker- Improved the floating-point formatter
737*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3448,
738*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3450).
739*5c90c05cSAndroid Build Coastguard Worker  Thanks @florimond-collette.
740*5c90c05cSAndroid Build Coastguard Worker
741*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of precision for `long double` larger than 64 bits.
742*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3539,
743*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3564).
744*5c90c05cSAndroid Build Coastguard Worker
745*5c90c05cSAndroid Build Coastguard Worker- Made floating-point and chrono tests less platform-dependent
746*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3337,
747*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3433,
748*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3434). Thanks @phprus.
749*5c90c05cSAndroid Build Coastguard Worker
750*5c90c05cSAndroid Build Coastguard Worker- Removed the remnants of the Grisu floating-point formatter that has
751*5c90c05cSAndroid Build Coastguard Worker  been replaced by Dragonbox in earlier versions.
752*5c90c05cSAndroid Build Coastguard Worker
753*5c90c05cSAndroid Build Coastguard Worker- Added `throw_format_error` to the public API
754*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3551). Thanks @mjerabek.
755*5c90c05cSAndroid Build Coastguard Worker
756*5c90c05cSAndroid Build Coastguard Worker- Made `FMT_THROW` assert even if assertions are disabled when
757*5c90c05cSAndroid Build Coastguard Worker  compiling with exceptions disabled
758*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3418,
759*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3439). Thanks @BRevzin.
760*5c90c05cSAndroid Build Coastguard Worker
761*5c90c05cSAndroid Build Coastguard Worker- Made `format_as` and `std::filesystem::path` formatter work with
762*5c90c05cSAndroid Build Coastguard Worker  exotic code unit types.
763*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3457,
764*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3476). Thanks @gix and @hmbj.
765*5c90c05cSAndroid Build Coastguard Worker
766*5c90c05cSAndroid Build Coastguard Worker- Added support for the `?` format specifier to
767*5c90c05cSAndroid Build Coastguard Worker  `std::filesystem::path` and made the default unescaped for
768*5c90c05cSAndroid Build Coastguard Worker  consistency with strings.
769*5c90c05cSAndroid Build Coastguard Worker
770*5c90c05cSAndroid Build Coastguard Worker- Deprecated the wide stream overload of `printf`.
771*5c90c05cSAndroid Build Coastguard Worker
772*5c90c05cSAndroid Build Coastguard Worker- Removed unused `basic_printf_parse_context`.
773*5c90c05cSAndroid Build Coastguard Worker
774*5c90c05cSAndroid Build Coastguard Worker- Improved RTTI detection used when formatting exceptions
775*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3468). Thanks @danakj.
776*5c90c05cSAndroid Build Coastguard Worker
777*5c90c05cSAndroid Build Coastguard Worker- Improved compatibility with VxWorks7
778*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3467). Thanks @wenshan1.
779*5c90c05cSAndroid Build Coastguard Worker
780*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
781*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3174,
782*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3423,
783*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3454,
784*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3458,
785*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3461,
786*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3487,
787*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3515).
788*5c90c05cSAndroid Build Coastguard Worker  Thanks @zencatalyst, @rlalik and @mikecrowe.
789*5c90c05cSAndroid Build Coastguard Worker
790*5c90c05cSAndroid Build Coastguard Worker- Improved build and CI configurations
791*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3449,
792*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3451,
793*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3452,
794*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3453,
795*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3459,
796*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3481,
797*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3486,
798*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3489,
799*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3496,
800*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3517,
801*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3523,
802*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3563).
803*5c90c05cSAndroid Build Coastguard Worker  Thanks @joycebrum, @glebm, @phprus, @petrmanek, @setoye and @abouvier.
804*5c90c05cSAndroid Build Coastguard Worker
805*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
806*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3408,
807*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3424,
808*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3444,
809*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3446,
810*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3475,
811*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3482,
812*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3492,
813*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3493,
814*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3508,
815*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3509,
816*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3533,
817*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3542,
818*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3543,
819*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3540,
820*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3544,
821*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3548,
822*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3549,
823*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3550,
824*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3552).
825*5c90c05cSAndroid Build Coastguard Worker  Thanks @adesitter, @hmbj, @Minty-Meeo, @phprus, @TobiSchluter,
826*5c90c05cSAndroid Build Coastguard Worker  @kieranclancy, @alexeedm, @jurihock, @Ozomahtli and @razaqq.
827*5c90c05cSAndroid Build Coastguard Worker
828*5c90c05cSAndroid Build Coastguard Worker# 10.0.0 - 2023-05-09
829*5c90c05cSAndroid Build Coastguard Worker
830*5c90c05cSAndroid Build Coastguard Worker- Replaced Grisu with a new floating-point formatting algorithm for
831*5c90c05cSAndroid Build Coastguard Worker  given precision (https://github.com/fmtlib/fmt/issues/3262,
832*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2750,
833*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3269,
834*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3276). The new algorithm
835*5c90c05cSAndroid Build Coastguard Worker  is based on Dragonbox already used for the shortest representation
836*5c90c05cSAndroid Build Coastguard Worker  and gives substantial performance improvement:
837*5c90c05cSAndroid Build Coastguard Worker
838*5c90c05cSAndroid Build Coastguard Worker  ![](https://user-images.githubusercontent.com/33922675/211956670-84891a09-6867-47d9-82fc-3230da7abe0f.png)
839*5c90c05cSAndroid Build Coastguard Worker
840*5c90c05cSAndroid Build Coastguard Worker  -   Red: new algorithm
841*5c90c05cSAndroid Build Coastguard Worker  -   Green: new algorithm with `FMT_USE_FULL_CACHE_DRAGONBOX` defined
842*5c90c05cSAndroid Build Coastguard Worker      to 1
843*5c90c05cSAndroid Build Coastguard Worker  -   Blue: old algorithm
844*5c90c05cSAndroid Build Coastguard Worker
845*5c90c05cSAndroid Build Coastguard Worker  Thanks @jk-jeon.
846*5c90c05cSAndroid Build Coastguard Worker
847*5c90c05cSAndroid Build Coastguard Worker- Replaced `snprintf`-based hex float formatter with an internal
848*5c90c05cSAndroid Build Coastguard Worker  implementation (https://github.com/fmtlib/fmt/pull/3179,
849*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3203). This removes the
850*5c90c05cSAndroid Build Coastguard Worker  last usage of `s(n)printf` in {fmt}. Thanks @phprus.
851*5c90c05cSAndroid Build Coastguard Worker
852*5c90c05cSAndroid Build Coastguard Worker- Fixed alignment of floating-point numbers with localization
853*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3263,
854*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3272). Thanks @ShawnZhong.
855*5c90c05cSAndroid Build Coastguard Worker
856*5c90c05cSAndroid Build Coastguard Worker- Made handling of `#` consistent with `std::format`.
857*5c90c05cSAndroid Build Coastguard Worker
858*5c90c05cSAndroid Build Coastguard Worker- Improved C++20 module support
859*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3134,
860*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3254,
861*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3386,
862*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3387,
863*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3388,
864*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3392,
865*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3397,
866*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3399,
867*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3400).
868*5c90c05cSAndroid Build Coastguard Worker  Thanks @laitingsheng, @Orvid and @DanielaE.
869*5c90c05cSAndroid Build Coastguard Worker
870*5c90c05cSAndroid Build Coastguard Worker- Switched to the [modules CMake library](https://github.com/vitaut/modules)
871*5c90c05cSAndroid Build Coastguard Worker  which allows building {fmt} as a C++20 module with clang:
872*5c90c05cSAndroid Build Coastguard Worker
873*5c90c05cSAndroid Build Coastguard Worker      CXX=clang++ cmake -DFMT_MODULE=ON .
874*5c90c05cSAndroid Build Coastguard Worker      make
875*5c90c05cSAndroid Build Coastguard Worker
876*5c90c05cSAndroid Build Coastguard Worker- Made `format_as` work with any user-defined type and not just enums.
877*5c90c05cSAndroid Build Coastguard Worker  For example ([godbolt](https://godbolt.org/z/b7rqhq5Kh)):
878*5c90c05cSAndroid Build Coastguard Worker
879*5c90c05cSAndroid Build Coastguard Worker  ```c++
880*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
881*5c90c05cSAndroid Build Coastguard Worker
882*5c90c05cSAndroid Build Coastguard Worker  struct floaty_mc_floatface {
883*5c90c05cSAndroid Build Coastguard Worker    double value;
884*5c90c05cSAndroid Build Coastguard Worker  };
885*5c90c05cSAndroid Build Coastguard Worker
886*5c90c05cSAndroid Build Coastguard Worker  auto format_as(floaty_mc_floatface f) { return f.value; }
887*5c90c05cSAndroid Build Coastguard Worker
888*5c90c05cSAndroid Build Coastguard Worker  int main() {
889*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:8}\n", floaty_mc_floatface{0.42}); // prints "    0.42"
890*5c90c05cSAndroid Build Coastguard Worker  }
891*5c90c05cSAndroid Build Coastguard Worker  ```
892*5c90c05cSAndroid Build Coastguard Worker
893*5c90c05cSAndroid Build Coastguard Worker- Removed deprecated implicit conversions for enums and conversions to
894*5c90c05cSAndroid Build Coastguard Worker  primitive types for compatibility with `std::format` and to prevent
895*5c90c05cSAndroid Build Coastguard Worker  potential ODR violations. Use `format_as` instead.
896*5c90c05cSAndroid Build Coastguard Worker
897*5c90c05cSAndroid Build Coastguard Worker- Added support for fill, align and width to the time point formatter
898*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3237,
899*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3260,
900*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3275). For example
901*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/rKP6MGz6c)):
902*5c90c05cSAndroid Build Coastguard Worker
903*5c90c05cSAndroid Build Coastguard Worker  ```c++
904*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
905*5c90c05cSAndroid Build Coastguard Worker
906*5c90c05cSAndroid Build Coastguard Worker  int main() {
907*5c90c05cSAndroid Build Coastguard Worker    // prints "    2023"
908*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:>8%Y}\n", std::chrono::system_clock::now());
909*5c90c05cSAndroid Build Coastguard Worker  }
910*5c90c05cSAndroid Build Coastguard Worker  ```
911*5c90c05cSAndroid Build Coastguard Worker
912*5c90c05cSAndroid Build Coastguard Worker  Thanks @ShawnZhong.
913*5c90c05cSAndroid Build Coastguard Worker
914*5c90c05cSAndroid Build Coastguard Worker- Implemented formatting of subseconds
915*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2207,
916*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3117,
917*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3115,
918*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3143,
919*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3144,
920*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3349). For example
921*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/45738oGEo)):
922*5c90c05cSAndroid Build Coastguard Worker
923*5c90c05cSAndroid Build Coastguard Worker  ```c++
924*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
925*5c90c05cSAndroid Build Coastguard Worker
926*5c90c05cSAndroid Build Coastguard Worker  int main() {
927*5c90c05cSAndroid Build Coastguard Worker    // prints 01.234567
928*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:%S}\n", std::chrono::microseconds(1234567));
929*5c90c05cSAndroid Build Coastguard Worker  }
930*5c90c05cSAndroid Build Coastguard Worker  ```
931*5c90c05cSAndroid Build Coastguard Worker
932*5c90c05cSAndroid Build Coastguard Worker  Thanks @patrickroocks @phprus and @BRevzin.
933*5c90c05cSAndroid Build Coastguard Worker
934*5c90c05cSAndroid Build Coastguard Worker- Added precision support to `%S`
935*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3148). Thanks @SappyJoy
936*5c90c05cSAndroid Build Coastguard Worker
937*5c90c05cSAndroid Build Coastguard Worker- Added support for `std::utc_time`
938*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3098,
939*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3110). Thanks @patrickroocks.
940*5c90c05cSAndroid Build Coastguard Worker
941*5c90c05cSAndroid Build Coastguard Worker- Switched formatting of `std::chrono::system_clock` from local time
942*5c90c05cSAndroid Build Coastguard Worker  to UTC for compatibility with the standard
943*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3199,
944*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3230). Thanks @ned14.
945*5c90c05cSAndroid Build Coastguard Worker
946*5c90c05cSAndroid Build Coastguard Worker- Added support for `%Ez` and `%Oz` to chrono formatters.
947*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3220,
948*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3222). Thanks @phprus.
949*5c90c05cSAndroid Build Coastguard Worker
950*5c90c05cSAndroid Build Coastguard Worker- Improved validation of format specifiers for `std::chrono::duration`
951*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3219,
952*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3232). Thanks @ShawnZhong.
953*5c90c05cSAndroid Build Coastguard Worker
954*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of time points before the epoch
955*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3117,
956*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3261). For example
957*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/f7bcznb3W)):
958*5c90c05cSAndroid Build Coastguard Worker
959*5c90c05cSAndroid Build Coastguard Worker  ```c++
960*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
961*5c90c05cSAndroid Build Coastguard Worker
962*5c90c05cSAndroid Build Coastguard Worker  int main() {
963*5c90c05cSAndroid Build Coastguard Worker    auto t = std::chrono::system_clock::from_time_t(0) -
964*5c90c05cSAndroid Build Coastguard Worker             std::chrono::milliseconds(250);
965*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:%S}\n", t); // prints 59.750000000
966*5c90c05cSAndroid Build Coastguard Worker  }
967*5c90c05cSAndroid Build Coastguard Worker  ```
968*5c90c05cSAndroid Build Coastguard Worker
969*5c90c05cSAndroid Build Coastguard Worker  Thanks @ShawnZhong.
970*5c90c05cSAndroid Build Coastguard Worker
971*5c90c05cSAndroid Build Coastguard Worker- Experimental: implemented glibc extension for padding seconds,
972*5c90c05cSAndroid Build Coastguard Worker  minutes and hours
973*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2959,
974*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3271). Thanks @ShawnZhong.
975*5c90c05cSAndroid Build Coastguard Worker
976*5c90c05cSAndroid Build Coastguard Worker- Added a formatter for `std::exception`
977*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2977,
978*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3012,
979*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3062,
980*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3076,
981*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3119). For example
982*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/8xoWGs9e4)):
983*5c90c05cSAndroid Build Coastguard Worker
984*5c90c05cSAndroid Build Coastguard Worker  ```c++
985*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/std.h>
986*5c90c05cSAndroid Build Coastguard Worker  #include <vector>
987*5c90c05cSAndroid Build Coastguard Worker
988*5c90c05cSAndroid Build Coastguard Worker  int main() {
989*5c90c05cSAndroid Build Coastguard Worker    try {
990*5c90c05cSAndroid Build Coastguard Worker      std::vector<bool>().at(0);
991*5c90c05cSAndroid Build Coastguard Worker    } catch(const std::exception& e) {
992*5c90c05cSAndroid Build Coastguard Worker      fmt::print("{}", e);
993*5c90c05cSAndroid Build Coastguard Worker    }
994*5c90c05cSAndroid Build Coastguard Worker  }
995*5c90c05cSAndroid Build Coastguard Worker  ```
996*5c90c05cSAndroid Build Coastguard Worker
997*5c90c05cSAndroid Build Coastguard Worker  prints:
998*5c90c05cSAndroid Build Coastguard Worker
999*5c90c05cSAndroid Build Coastguard Worker      vector<bool>::_M_range_check: __n (which is 0) >= this->size() (which is 0)
1000*5c90c05cSAndroid Build Coastguard Worker
1001*5c90c05cSAndroid Build Coastguard Worker  on libstdc++. Thanks @zach2good and @phprus.
1002*5c90c05cSAndroid Build Coastguard Worker
1003*5c90c05cSAndroid Build Coastguard Worker- Moved `std::error_code` formatter from `fmt/os.h` to `fmt/std.h`.
1004*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3125). Thanks @phprus.
1005*5c90c05cSAndroid Build Coastguard Worker
1006*5c90c05cSAndroid Build Coastguard Worker- Added formatters for standard container adapters:
1007*5c90c05cSAndroid Build Coastguard Worker  `std::priority_queue`, `std::queue` and `std::stack`
1008*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3215,
1009*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3279). For example
1010*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/74h1xY9qK)):
1011*5c90c05cSAndroid Build Coastguard Worker
1012*5c90c05cSAndroid Build Coastguard Worker  ```c++
1013*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ranges.h>
1014*5c90c05cSAndroid Build Coastguard Worker  #include <stack>
1015*5c90c05cSAndroid Build Coastguard Worker  #include <vector>
1016*5c90c05cSAndroid Build Coastguard Worker
1017*5c90c05cSAndroid Build Coastguard Worker  int main() {
1018*5c90c05cSAndroid Build Coastguard Worker    auto s = std::stack<bool, std::vector<bool>>();
1019*5c90c05cSAndroid Build Coastguard Worker    for (auto b: {true, false, true}) s.push(b);
1020*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}\n", s); // prints [true, false, true]
1021*5c90c05cSAndroid Build Coastguard Worker  }
1022*5c90c05cSAndroid Build Coastguard Worker  ```
1023*5c90c05cSAndroid Build Coastguard Worker
1024*5c90c05cSAndroid Build Coastguard Worker  Thanks @ShawnZhong.
1025*5c90c05cSAndroid Build Coastguard Worker
1026*5c90c05cSAndroid Build Coastguard Worker- Added a formatter for `std::optional` to `fmt/std.h`
1027*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1367,
1028*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3303).
1029*5c90c05cSAndroid Build Coastguard Worker  Thanks @tom-huntington.
1030*5c90c05cSAndroid Build Coastguard Worker
1031*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of valueless by exception variants
1032*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3347). Thanks @TheOmegaCarrot.
1033*5c90c05cSAndroid Build Coastguard Worker
1034*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::ptr` accept `unique_ptr` with a custom deleter
1035*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3177). Thanks @hmbj.
1036*5c90c05cSAndroid Build Coastguard Worker
1037*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of noncopyable ranges and nested ranges of chars
1038*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3158
1039*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3286,
1040*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3290). Thanks @BRevzin.
1041*5c90c05cSAndroid Build Coastguard Worker
1042*5c90c05cSAndroid Build Coastguard Worker- Fixed issues with formatting of paths and ranges of paths
1043*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3319,
1044*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3321
1045*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3322). Thanks @phprus.
1046*5c90c05cSAndroid Build Coastguard Worker
1047*5c90c05cSAndroid Build Coastguard Worker- Improved handling of invalid Unicode in paths.
1048*5c90c05cSAndroid Build Coastguard Worker
1049*5c90c05cSAndroid Build Coastguard Worker- Enabled compile-time checks on Apple clang 14 and later
1050*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3331). Thanks @cloyce.
1051*5c90c05cSAndroid Build Coastguard Worker
1052*5c90c05cSAndroid Build Coastguard Worker- Improved compile-time checks of named arguments
1053*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3105,
1054*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3214). Thanks @rbrich.
1055*5c90c05cSAndroid Build Coastguard Worker
1056*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting when both alignment and `0` are given
1057*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3236,
1058*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3248). Thanks @ShawnZhong.
1059*5c90c05cSAndroid Build Coastguard Worker
1060*5c90c05cSAndroid Build Coastguard Worker- Improved Unicode support in the experimental file API on Windows
1061*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3234,
1062*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3293). Thanks @Fros1er.
1063*5c90c05cSAndroid Build Coastguard Worker
1064*5c90c05cSAndroid Build Coastguard Worker- Unified UTF transcoding
1065*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3416). Thanks @phprus.
1066*5c90c05cSAndroid Build Coastguard Worker
1067*5c90c05cSAndroid Build Coastguard Worker- Added support for UTF-8 digit separators via an experimental locale
1068*5c90c05cSAndroid Build Coastguard Worker  facet (https://github.com/fmtlib/fmt/issues/1861). For
1069*5c90c05cSAndroid Build Coastguard Worker  example ([godbolt](https://godbolt.org/z/f7bcznb3W)):
1070*5c90c05cSAndroid Build Coastguard Worker
1071*5c90c05cSAndroid Build Coastguard Worker  ```c++
1072*5c90c05cSAndroid Build Coastguard Worker  auto loc = std::locale(
1073*5c90c05cSAndroid Build Coastguard Worker    std::locale(), new fmt::format_facet<std::locale>("’"));
1074*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format(loc, "{:L}", 1000);
1075*5c90c05cSAndroid Build Coastguard Worker  ```
1076*5c90c05cSAndroid Build Coastguard Worker
1077*5c90c05cSAndroid Build Coastguard Worker  where `’` is U+2019 used as a digit separator in the de_CH locale.
1078*5c90c05cSAndroid Build Coastguard Worker
1079*5c90c05cSAndroid Build Coastguard Worker- Added an overload of `formatted_size` that takes a locale
1080*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3084,
1081*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3087). Thanks @gerboengels.
1082*5c90c05cSAndroid Build Coastguard Worker
1083*5c90c05cSAndroid Build Coastguard Worker- Removed the deprecated `FMT_DEPRECATED_OSTREAM`.
1084*5c90c05cSAndroid Build Coastguard Worker
1085*5c90c05cSAndroid Build Coastguard Worker- Fixed a UB when using a null `std::string_view` with
1086*5c90c05cSAndroid Build Coastguard Worker  `fmt::to_string` or format string compilation
1087*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3241,
1088*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3244). Thanks @phprus.
1089*5c90c05cSAndroid Build Coastguard Worker
1090*5c90c05cSAndroid Build Coastguard Worker- Added `starts_with` to the fallback `string_view` implementation
1091*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3080). Thanks @phprus.
1092*5c90c05cSAndroid Build Coastguard Worker
1093*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::basic_format_string::get()` for compatibility with
1094*5c90c05cSAndroid Build Coastguard Worker  `basic_format_string`
1095*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3111). Thanks @huangqinjin.
1096*5c90c05cSAndroid Build Coastguard Worker
1097*5c90c05cSAndroid Build Coastguard Worker- Added `println` for compatibility with C++23
1098*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3267). Thanks @ShawnZhong.
1099*5c90c05cSAndroid Build Coastguard Worker
1100*5c90c05cSAndroid Build Coastguard Worker- Renamed the `FMT_EXPORT` macro for shared library usage to
1101*5c90c05cSAndroid Build Coastguard Worker  `FMT_LIB_EXPORT`.
1102*5c90c05cSAndroid Build Coastguard Worker
1103*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
1104*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3108,
1105*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3169,
1106*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3243).
1107*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3404,
1108*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/4002).
1109*5c90c05cSAndroid Build Coastguard Worker  Thanks @Cleroth, @Vertexwahn and @yujincheng08.
1110*5c90c05cSAndroid Build Coastguard Worker
1111*5c90c05cSAndroid Build Coastguard Worker- Improved build configuration and tests
1112*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3118,
1113*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3120,
1114*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3188,
1115*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3189,
1116*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3198,
1117*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3205,
1118*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3207,
1119*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3210,
1120*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3240,
1121*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3256,
1122*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3264,
1123*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3299,
1124*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3302,
1125*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3312,
1126*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3317,
1127*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3328,
1128*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3333,
1129*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3369,
1130*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3373,
1131*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3395,
1132*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3406,
1133*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3411).
1134*5c90c05cSAndroid Build Coastguard Worker  Thanks @dimztimz, @phprus, @DavidKorczynski, @ChrisThrasher,
1135*5c90c05cSAndroid Build Coastguard Worker  @FrancoisCarouge, @kennyweiss, @luzpaz, @codeinred, @Mixaill, @joycebrum,
1136*5c90c05cSAndroid Build Coastguard Worker  @kevinhwang and @Vertexwahn.
1137*5c90c05cSAndroid Build Coastguard Worker
1138*5c90c05cSAndroid Build Coastguard Worker- Fixed a regression in handling empty format specifiers after a colon
1139*5c90c05cSAndroid Build Coastguard Worker  (`{:}`) (https://github.com/fmtlib/fmt/pull/3086). Thanks @oxidase.
1140*5c90c05cSAndroid Build Coastguard Worker
1141*5c90c05cSAndroid Build Coastguard Worker- Worked around a broken implementation of
1142*5c90c05cSAndroid Build Coastguard Worker  `std::is_constant_evaluated` in some versions of libstdc++ on clang
1143*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3247,
1144*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3281). Thanks @phprus.
1145*5c90c05cSAndroid Build Coastguard Worker
1146*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of volatile variables
1147*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3068).
1148*5c90c05cSAndroid Build Coastguard Worker
1149*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
1150*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3057,
1151*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3066,
1152*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3072,
1153*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3082,
1154*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3091,
1155*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3092,
1156*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3093,
1157*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3095,
1158*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3096,
1159*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3097,
1160*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3128,
1161*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3129,
1162*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3137,
1163*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3139,
1164*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3140,
1165*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3142,
1166*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3149,
1167*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3150,
1168*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3154,
1169*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3163,
1170*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3178,
1171*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3184,
1172*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3196,
1173*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3204,
1174*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3206,
1175*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3208,
1176*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3213,
1177*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3216,
1178*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3224,
1179*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3226,
1180*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3228,
1181*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3229,
1182*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3259,
1183*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3274,
1184*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3287,
1185*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3288,
1186*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3292,
1187*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3295,
1188*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3296,
1189*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3298,
1190*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3325,
1191*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3326,
1192*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3334,
1193*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3342,
1194*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3343,
1195*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3351,
1196*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3352,
1197*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3362,
1198*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3365,
1199*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3366,
1200*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3374,
1201*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3377,
1202*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3378,
1203*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3381,
1204*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3398,
1205*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3413,
1206*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3415).
1207*5c90c05cSAndroid Build Coastguard Worker  Thanks @phprus, @gsjaardema, @NewbieOrange, @EngineLessCC, @asmaloney,
1208*5c90c05cSAndroid Build Coastguard Worker  @HazardyKnusperkeks, @sergiud, @Youw, @thesmurph, @czudziakm,
1209*5c90c05cSAndroid Build Coastguard Worker  @Roman-Koshelev, @chronoxor, @ShawnZhong, @russelltg, @glebm, @tmartin-gh,
1210*5c90c05cSAndroid Build Coastguard Worker  @Zhaojun-Liu, @louiswins and @mogemimi.
1211*5c90c05cSAndroid Build Coastguard Worker
1212*5c90c05cSAndroid Build Coastguard Worker# 9.1.0 - 2022-08-27
1213*5c90c05cSAndroid Build Coastguard Worker
1214*5c90c05cSAndroid Build Coastguard Worker- `fmt::formatted_size` now works at compile time
1215*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3026). For example
1216*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/1MW5rMdf8)):
1217*5c90c05cSAndroid Build Coastguard Worker
1218*5c90c05cSAndroid Build Coastguard Worker  ```c++
1219*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/compile.h>
1220*5c90c05cSAndroid Build Coastguard Worker
1221*5c90c05cSAndroid Build Coastguard Worker  int main() {
1222*5c90c05cSAndroid Build Coastguard Worker    using namespace fmt::literals;
1223*5c90c05cSAndroid Build Coastguard Worker    constexpr size_t n = fmt::formatted_size("{}"_cf, 42);
1224*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}\n", n); // prints 2
1225*5c90c05cSAndroid Build Coastguard Worker  }
1226*5c90c05cSAndroid Build Coastguard Worker  ```
1227*5c90c05cSAndroid Build Coastguard Worker
1228*5c90c05cSAndroid Build Coastguard Worker  Thanks @marksantaniello.
1229*5c90c05cSAndroid Build Coastguard Worker
1230*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of invalid UTF-8
1231*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3038,
1232*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3044,
1233*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3056).
1234*5c90c05cSAndroid Build Coastguard Worker  Thanks @phprus and @skeeto.
1235*5c90c05cSAndroid Build Coastguard Worker
1236*5c90c05cSAndroid Build Coastguard Worker- Improved Unicode support in `ostream` overloads of `print`
1237*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2994,
1238*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3001,
1239*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3025). Thanks @dimztimz.
1240*5c90c05cSAndroid Build Coastguard Worker
1241*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of the sign specifier in localized formatting on
1242*5c90c05cSAndroid Build Coastguard Worker  systems with 32-bit `wchar_t`
1243*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3041).
1244*5c90c05cSAndroid Build Coastguard Worker
1245*5c90c05cSAndroid Build Coastguard Worker- Added support for wide streams to `fmt::streamed`
1246*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2994). Thanks @phprus.
1247*5c90c05cSAndroid Build Coastguard Worker
1248*5c90c05cSAndroid Build Coastguard Worker- Added the `n` specifier that disables the output of delimiters when
1249*5c90c05cSAndroid Build Coastguard Worker  formatting ranges (https://github.com/fmtlib/fmt/pull/2981,
1250*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2983). For example
1251*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/roKqGdj8c)):
1252*5c90c05cSAndroid Build Coastguard Worker
1253*5c90c05cSAndroid Build Coastguard Worker  ```c++
1254*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ranges.h>
1255*5c90c05cSAndroid Build Coastguard Worker  #include <vector>
1256*5c90c05cSAndroid Build Coastguard Worker
1257*5c90c05cSAndroid Build Coastguard Worker  int main() {
1258*5c90c05cSAndroid Build Coastguard Worker    auto v = std::vector{1, 2, 3};
1259*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:n}\n", v); // prints 1, 2, 3
1260*5c90c05cSAndroid Build Coastguard Worker  }
1261*5c90c05cSAndroid Build Coastguard Worker  ```
1262*5c90c05cSAndroid Build Coastguard Worker
1263*5c90c05cSAndroid Build Coastguard Worker  Thanks @BRevzin.
1264*5c90c05cSAndroid Build Coastguard Worker
1265*5c90c05cSAndroid Build Coastguard Worker- Worked around problematic `std::string_view` constructors introduced
1266*5c90c05cSAndroid Build Coastguard Worker  in C++23 (https://github.com/fmtlib/fmt/issues/3030,
1267*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3050). Thanks @strega-nil-ms.
1268*5c90c05cSAndroid Build Coastguard Worker
1269*5c90c05cSAndroid Build Coastguard Worker- Improve handling (exclusion) of recursive ranges
1270*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2968,
1271*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2974). Thanks @Dani-Hub.
1272*5c90c05cSAndroid Build Coastguard Worker
1273*5c90c05cSAndroid Build Coastguard Worker- Improved error reporting in format string compilation
1274*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/3055).
1275*5c90c05cSAndroid Build Coastguard Worker
1276*5c90c05cSAndroid Build Coastguard Worker- Improved the implementation of
1277*5c90c05cSAndroid Build Coastguard Worker  [Dragonbox](https://github.com/jk-jeon/dragonbox), the algorithm
1278*5c90c05cSAndroid Build Coastguard Worker  used for the default floating-point formatting
1279*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2984). Thanks @jk-jeon.
1280*5c90c05cSAndroid Build Coastguard Worker
1281*5c90c05cSAndroid Build Coastguard Worker- Fixed issues with floating-point formatting on exotic platforms.
1282*5c90c05cSAndroid Build Coastguard Worker
1283*5c90c05cSAndroid Build Coastguard Worker- Improved the implementation of chrono formatting
1284*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/3010). Thanks @phprus.
1285*5c90c05cSAndroid Build Coastguard Worker
1286*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
1287*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2966,
1288*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3009,
1289*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3020,
1290*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3037).
1291*5c90c05cSAndroid Build Coastguard Worker  Thanks @mwinterb, @jcelerier and @remiburtin.
1292*5c90c05cSAndroid Build Coastguard Worker
1293*5c90c05cSAndroid Build Coastguard Worker- Improved build configuration
1294*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2991,
1295*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2995,
1296*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3004,
1297*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3007,
1298*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3040).
1299*5c90c05cSAndroid Build Coastguard Worker  Thanks @dimztimz and @hwhsu1231.
1300*5c90c05cSAndroid Build Coastguard Worker
1301*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
1302*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2969,
1303*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2971,
1304*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2975,
1305*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2982,
1306*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2985,
1307*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2988,
1308*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2989,
1309*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3000,
1310*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3006,
1311*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3014,
1312*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3015,
1313*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3021,
1314*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3023,
1315*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3024,
1316*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3029,
1317*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3043,
1318*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/3052,
1319*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3053,
1320*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/3054).
1321*5c90c05cSAndroid Build Coastguard Worker  Thanks @h-friederich, @dimztimz, @olupton, @bernhardmgruber and @phprus.
1322*5c90c05cSAndroid Build Coastguard Worker
1323*5c90c05cSAndroid Build Coastguard Worker# 9.0.0 - 2022-07-04
1324*5c90c05cSAndroid Build Coastguard Worker
1325*5c90c05cSAndroid Build Coastguard Worker- Switched to the internal floating point formatter for all decimal
1326*5c90c05cSAndroid Build Coastguard Worker  presentation formats. In particular this results in consistent
1327*5c90c05cSAndroid Build Coastguard Worker  rounding on all platforms and removing the `s[n]printf` fallback for
1328*5c90c05cSAndroid Build Coastguard Worker  decimal FP formatting.
1329*5c90c05cSAndroid Build Coastguard Worker
1330*5c90c05cSAndroid Build Coastguard Worker- Compile-time floating point formatting no longer requires the
1331*5c90c05cSAndroid Build Coastguard Worker  header-only mode. For example
1332*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/G37PTeG3b)):
1333*5c90c05cSAndroid Build Coastguard Worker
1334*5c90c05cSAndroid Build Coastguard Worker  ```c++
1335*5c90c05cSAndroid Build Coastguard Worker  #include <array>
1336*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/compile.h>
1337*5c90c05cSAndroid Build Coastguard Worker
1338*5c90c05cSAndroid Build Coastguard Worker  consteval auto compile_time_dtoa(double value) -> std::array<char, 10> {
1339*5c90c05cSAndroid Build Coastguard Worker    auto result = std::array<char, 10>();
1340*5c90c05cSAndroid Build Coastguard Worker    fmt::format_to(result.data(), FMT_COMPILE("{}"), value);
1341*5c90c05cSAndroid Build Coastguard Worker    return result;
1342*5c90c05cSAndroid Build Coastguard Worker  }
1343*5c90c05cSAndroid Build Coastguard Worker
1344*5c90c05cSAndroid Build Coastguard Worker  constexpr auto answer = compile_time_dtoa(0.42);
1345*5c90c05cSAndroid Build Coastguard Worker  ```
1346*5c90c05cSAndroid Build Coastguard Worker
1347*5c90c05cSAndroid Build Coastguard Worker  works with the default settings.
1348*5c90c05cSAndroid Build Coastguard Worker
1349*5c90c05cSAndroid Build Coastguard Worker- Improved the implementation of
1350*5c90c05cSAndroid Build Coastguard Worker  [Dragonbox](https://github.com/jk-jeon/dragonbox), the algorithm
1351*5c90c05cSAndroid Build Coastguard Worker  used for the default floating-point formatting
1352*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2713,
1353*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2750). Thanks @jk-jeon.
1354*5c90c05cSAndroid Build Coastguard Worker
1355*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::to_string` work with `__float128`. This uses the internal
1356*5c90c05cSAndroid Build Coastguard Worker  FP formatter and works even on system without `__float128` support
1357*5c90c05cSAndroid Build Coastguard Worker  in `[s]printf`.
1358*5c90c05cSAndroid Build Coastguard Worker
1359*5c90c05cSAndroid Build Coastguard Worker- Disabled automatic `std::ostream` insertion operator (`operator<<`)
1360*5c90c05cSAndroid Build Coastguard Worker  discovery when `fmt/ostream.h` is included to prevent ODR
1361*5c90c05cSAndroid Build Coastguard Worker  violations. You can get the old behavior by defining
1362*5c90c05cSAndroid Build Coastguard Worker  `FMT_DEPRECATED_OSTREAM` but this will be removed in the next major
1363*5c90c05cSAndroid Build Coastguard Worker  release. Use `fmt::streamed` or `fmt::ostream_formatter` to enable
1364*5c90c05cSAndroid Build Coastguard Worker  formatting via `std::ostream` instead.
1365*5c90c05cSAndroid Build Coastguard Worker
1366*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::ostream_formatter` that can be used to write `formatter`
1367*5c90c05cSAndroid Build Coastguard Worker  specializations that perform formatting via `std::ostream`. For
1368*5c90c05cSAndroid Build Coastguard Worker  example ([godbolt](https://godbolt.org/z/5sEc5qMsf)):
1369*5c90c05cSAndroid Build Coastguard Worker
1370*5c90c05cSAndroid Build Coastguard Worker  ```c++
1371*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ostream.h>
1372*5c90c05cSAndroid Build Coastguard Worker
1373*5c90c05cSAndroid Build Coastguard Worker  struct date {
1374*5c90c05cSAndroid Build Coastguard Worker    int year, month, day;
1375*5c90c05cSAndroid Build Coastguard Worker
1376*5c90c05cSAndroid Build Coastguard Worker    friend std::ostream& operator<<(std::ostream& os, const date& d) {
1377*5c90c05cSAndroid Build Coastguard Worker      return os << d.year << '-' << d.month << '-' << d.day;
1378*5c90c05cSAndroid Build Coastguard Worker    }
1379*5c90c05cSAndroid Build Coastguard Worker  };
1380*5c90c05cSAndroid Build Coastguard Worker
1381*5c90c05cSAndroid Build Coastguard Worker  template <> struct fmt::formatter<date> : ostream_formatter {};
1382*5c90c05cSAndroid Build Coastguard Worker
1383*5c90c05cSAndroid Build Coastguard Worker  std::string s = fmt::format("The date is {}", date{2012, 12, 9});
1384*5c90c05cSAndroid Build Coastguard Worker  // s == "The date is 2012-12-9"
1385*5c90c05cSAndroid Build Coastguard Worker  ```
1386*5c90c05cSAndroid Build Coastguard Worker
1387*5c90c05cSAndroid Build Coastguard Worker- Added the `fmt::streamed` function that takes an object and formats
1388*5c90c05cSAndroid Build Coastguard Worker  it via `std::ostream`. For example
1389*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/5G3346G1f)):
1390*5c90c05cSAndroid Build Coastguard Worker
1391*5c90c05cSAndroid Build Coastguard Worker  ```c++
1392*5c90c05cSAndroid Build Coastguard Worker  #include <thread>
1393*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ostream.h>
1394*5c90c05cSAndroid Build Coastguard Worker
1395*5c90c05cSAndroid Build Coastguard Worker  int main() {
1396*5c90c05cSAndroid Build Coastguard Worker    fmt::print("Current thread id: {}\n",
1397*5c90c05cSAndroid Build Coastguard Worker               fmt::streamed(std::this_thread::get_id()));
1398*5c90c05cSAndroid Build Coastguard Worker  }
1399*5c90c05cSAndroid Build Coastguard Worker  ```
1400*5c90c05cSAndroid Build Coastguard Worker
1401*5c90c05cSAndroid Build Coastguard Worker  Note that `fmt/std.h` provides a `formatter` specialization for
1402*5c90c05cSAndroid Build Coastguard Worker  `std::thread::id` so you don\'t need to format it via
1403*5c90c05cSAndroid Build Coastguard Worker  `std::ostream`.
1404*5c90c05cSAndroid Build Coastguard Worker
1405*5c90c05cSAndroid Build Coastguard Worker- Deprecated implicit conversions of unscoped enums to integers for
1406*5c90c05cSAndroid Build Coastguard Worker  consistency with scoped enums.
1407*5c90c05cSAndroid Build Coastguard Worker
1408*5c90c05cSAndroid Build Coastguard Worker- Added an argument-dependent lookup based `format_as` extension API
1409*5c90c05cSAndroid Build Coastguard Worker  to simplify formatting of enums.
1410*5c90c05cSAndroid Build Coastguard Worker
1411*5c90c05cSAndroid Build Coastguard Worker- Added experimental `std::variant` formatting support
1412*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2941). For example
1413*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/KG9z6cq68)):
1414*5c90c05cSAndroid Build Coastguard Worker
1415*5c90c05cSAndroid Build Coastguard Worker  ```c++
1416*5c90c05cSAndroid Build Coastguard Worker  #include <variant>
1417*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/std.h>
1418*5c90c05cSAndroid Build Coastguard Worker
1419*5c90c05cSAndroid Build Coastguard Worker  int main() {
1420*5c90c05cSAndroid Build Coastguard Worker    auto v = std::variant<int, std::string>(42);
1421*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}\n", v);
1422*5c90c05cSAndroid Build Coastguard Worker  }
1423*5c90c05cSAndroid Build Coastguard Worker  ```
1424*5c90c05cSAndroid Build Coastguard Worker
1425*5c90c05cSAndroid Build Coastguard Worker  prints:
1426*5c90c05cSAndroid Build Coastguard Worker
1427*5c90c05cSAndroid Build Coastguard Worker      variant(42)
1428*5c90c05cSAndroid Build Coastguard Worker
1429*5c90c05cSAndroid Build Coastguard Worker  Thanks @jehelset.
1430*5c90c05cSAndroid Build Coastguard Worker
1431*5c90c05cSAndroid Build Coastguard Worker- Added experimental `std::filesystem::path` formatting support
1432*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2865,
1433*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2902,
1434*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2917,
1435*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2918). For example
1436*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/o44dMexEb)):
1437*5c90c05cSAndroid Build Coastguard Worker
1438*5c90c05cSAndroid Build Coastguard Worker  ```c++
1439*5c90c05cSAndroid Build Coastguard Worker  #include <filesystem>
1440*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/std.h>
1441*5c90c05cSAndroid Build Coastguard Worker
1442*5c90c05cSAndroid Build Coastguard Worker  int main() {
1443*5c90c05cSAndroid Build Coastguard Worker    fmt::print("There is no place like {}.", std::filesystem::path("/home"));
1444*5c90c05cSAndroid Build Coastguard Worker  }
1445*5c90c05cSAndroid Build Coastguard Worker  ```
1446*5c90c05cSAndroid Build Coastguard Worker
1447*5c90c05cSAndroid Build Coastguard Worker  prints:
1448*5c90c05cSAndroid Build Coastguard Worker
1449*5c90c05cSAndroid Build Coastguard Worker      There is no place like "/home".
1450*5c90c05cSAndroid Build Coastguard Worker
1451*5c90c05cSAndroid Build Coastguard Worker  Thanks @phprus.
1452*5c90c05cSAndroid Build Coastguard Worker
1453*5c90c05cSAndroid Build Coastguard Worker- Added a `std::thread::id` formatter to `fmt/std.h`. For example
1454*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/j1azbYf3E)):
1455*5c90c05cSAndroid Build Coastguard Worker
1456*5c90c05cSAndroid Build Coastguard Worker  ```c++
1457*5c90c05cSAndroid Build Coastguard Worker  #include <thread>
1458*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/std.h>
1459*5c90c05cSAndroid Build Coastguard Worker
1460*5c90c05cSAndroid Build Coastguard Worker  int main() {
1461*5c90c05cSAndroid Build Coastguard Worker    fmt::print("Current thread id: {}\n", std::this_thread::get_id());
1462*5c90c05cSAndroid Build Coastguard Worker  }
1463*5c90c05cSAndroid Build Coastguard Worker  ```
1464*5c90c05cSAndroid Build Coastguard Worker
1465*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::styled` that applies a text style to an individual
1466*5c90c05cSAndroid Build Coastguard Worker  argument (https://github.com/fmtlib/fmt/pull/2793). For
1467*5c90c05cSAndroid Build Coastguard Worker  example ([godbolt](https://godbolt.org/z/vWGW7v5M6)):
1468*5c90c05cSAndroid Build Coastguard Worker
1469*5c90c05cSAndroid Build Coastguard Worker  ```c++
1470*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
1471*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/color.h>
1472*5c90c05cSAndroid Build Coastguard Worker
1473*5c90c05cSAndroid Build Coastguard Worker  int main() {
1474*5c90c05cSAndroid Build Coastguard Worker    auto now = std::chrono::system_clock::now();
1475*5c90c05cSAndroid Build Coastguard Worker    fmt::print(
1476*5c90c05cSAndroid Build Coastguard Worker      "[{}] {}: {}\n",
1477*5c90c05cSAndroid Build Coastguard Worker      fmt::styled(now, fmt::emphasis::bold),
1478*5c90c05cSAndroid Build Coastguard Worker      fmt::styled("error", fg(fmt::color::red)),
1479*5c90c05cSAndroid Build Coastguard Worker      "something went wrong");
1480*5c90c05cSAndroid Build Coastguard Worker  }
1481*5c90c05cSAndroid Build Coastguard Worker  ```
1482*5c90c05cSAndroid Build Coastguard Worker
1483*5c90c05cSAndroid Build Coastguard Worker  prints
1484*5c90c05cSAndroid Build Coastguard Worker
1485*5c90c05cSAndroid Build Coastguard Worker  ![](https://user-images.githubusercontent.com/576385/175071215-12809244-dab0-4005-96d8-7cd911c964d5.png)
1486*5c90c05cSAndroid Build Coastguard Worker
1487*5c90c05cSAndroid Build Coastguard Worker  Thanks @rbrugo.
1488*5c90c05cSAndroid Build Coastguard Worker
1489*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::print` overload for text styles correctly handle UTF-8
1490*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2681,
1491*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2701). Thanks @AlexGuteniev.
1492*5c90c05cSAndroid Build Coastguard Worker
1493*5c90c05cSAndroid Build Coastguard Worker- Fixed Unicode handling when writing to an ostream.
1494*5c90c05cSAndroid Build Coastguard Worker
1495*5c90c05cSAndroid Build Coastguard Worker- Added support for nested specifiers to range formatting
1496*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2673). For example
1497*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/xd3Gj38cf)):
1498*5c90c05cSAndroid Build Coastguard Worker
1499*5c90c05cSAndroid Build Coastguard Worker  ```c++
1500*5c90c05cSAndroid Build Coastguard Worker  #include <vector>
1501*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ranges.h>
1502*5c90c05cSAndroid Build Coastguard Worker
1503*5c90c05cSAndroid Build Coastguard Worker  int main() {
1504*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{::#x}\n", std::vector{10, 20, 30});
1505*5c90c05cSAndroid Build Coastguard Worker  }
1506*5c90c05cSAndroid Build Coastguard Worker  ```
1507*5c90c05cSAndroid Build Coastguard Worker
1508*5c90c05cSAndroid Build Coastguard Worker  prints `[0xa, 0x14, 0x1e]`.
1509*5c90c05cSAndroid Build Coastguard Worker
1510*5c90c05cSAndroid Build Coastguard Worker  Thanks @BRevzin.
1511*5c90c05cSAndroid Build Coastguard Worker
1512*5c90c05cSAndroid Build Coastguard Worker- Implemented escaping of wide strings in ranges
1513*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2904). Thanks @phprus.
1514*5c90c05cSAndroid Build Coastguard Worker
1515*5c90c05cSAndroid Build Coastguard Worker- Added support for ranges with `begin` / `end` found via the
1516*5c90c05cSAndroid Build Coastguard Worker  argument-dependent lookup
1517*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2807). Thanks @rbrugo.
1518*5c90c05cSAndroid Build Coastguard Worker
1519*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of certain kinds of ranges of ranges
1520*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2787). Thanks @BRevzin.
1521*5c90c05cSAndroid Build Coastguard Worker
1522*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of maps with element types other than `std::pair`
1523*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2944). Thanks @BrukerJWD.
1524*5c90c05cSAndroid Build Coastguard Worker
1525*5c90c05cSAndroid Build Coastguard Worker- Made tuple formatter enabled only if elements are formattable
1526*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2939,
1527*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2940). Thanks @jehelset.
1528*5c90c05cSAndroid Build Coastguard Worker
1529*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::join` compatible with format string compilation
1530*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2719,
1531*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2720). Thanks @phprus.
1532*5c90c05cSAndroid Build Coastguard Worker
1533*5c90c05cSAndroid Build Coastguard Worker- Made compile-time checks work with named arguments of custom types
1534*5c90c05cSAndroid Build Coastguard Worker  and `std::ostream` `print` overloads
1535*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2816,
1536*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2817,
1537*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2819). Thanks @timsong-cpp.
1538*5c90c05cSAndroid Build Coastguard Worker
1539*5c90c05cSAndroid Build Coastguard Worker- Removed `make_args_checked` because it is no longer needed for
1540*5c90c05cSAndroid Build Coastguard Worker  compile-time checks
1541*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2760). Thanks @phprus.
1542*5c90c05cSAndroid Build Coastguard Worker
1543*5c90c05cSAndroid Build Coastguard Worker- Removed the following deprecated APIs: `_format`, `arg_join`, the
1544*5c90c05cSAndroid Build Coastguard Worker  `format_to` overload that takes a memory buffer, `[v]fprintf` that
1545*5c90c05cSAndroid Build Coastguard Worker  takes an `ostream`.
1546*5c90c05cSAndroid Build Coastguard Worker
1547*5c90c05cSAndroid Build Coastguard Worker- Removed the deprecated implicit conversion of `[const] signed char*`
1548*5c90c05cSAndroid Build Coastguard Worker  and `[const] unsigned char*` to C strings.
1549*5c90c05cSAndroid Build Coastguard Worker
1550*5c90c05cSAndroid Build Coastguard Worker- Removed the deprecated `fmt/locale.h`.
1551*5c90c05cSAndroid Build Coastguard Worker
1552*5c90c05cSAndroid Build Coastguard Worker- Replaced the deprecated `fileno()` with `descriptor()` in
1553*5c90c05cSAndroid Build Coastguard Worker  `buffered_file`.
1554*5c90c05cSAndroid Build Coastguard Worker
1555*5c90c05cSAndroid Build Coastguard Worker- Moved `to_string_view` to the `detail` namespace since it\'s an
1556*5c90c05cSAndroid Build Coastguard Worker  implementation detail.
1557*5c90c05cSAndroid Build Coastguard Worker
1558*5c90c05cSAndroid Build Coastguard Worker- Made access mode of a created file consistent with `fopen` by
1559*5c90c05cSAndroid Build Coastguard Worker  setting `S_IWGRP` and `S_IWOTH`
1560*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2733). Thanks @arogge.
1561*5c90c05cSAndroid Build Coastguard Worker
1562*5c90c05cSAndroid Build Coastguard Worker- Removed a redundant buffer resize when formatting to `std::ostream`
1563*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2842,
1564*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2843). Thanks @jcelerier.
1565*5c90c05cSAndroid Build Coastguard Worker
1566*5c90c05cSAndroid Build Coastguard Worker- Made precision computation for strings consistent with width
1567*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2888).
1568*5c90c05cSAndroid Build Coastguard Worker
1569*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of locale separators in floating point formatting
1570*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2830).
1571*5c90c05cSAndroid Build Coastguard Worker
1572*5c90c05cSAndroid Build Coastguard Worker- Made sign specifiers work with `__int128_t`
1573*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2773).
1574*5c90c05cSAndroid Build Coastguard Worker
1575*5c90c05cSAndroid Build Coastguard Worker- Improved support for systems such as CHERI with extra data stored in
1576*5c90c05cSAndroid Build Coastguard Worker  pointers (https://github.com/fmtlib/fmt/pull/2932).
1577*5c90c05cSAndroid Build Coastguard Worker  Thanks @davidchisnall.
1578*5c90c05cSAndroid Build Coastguard Worker
1579*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
1580*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2706,
1581*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2712,
1582*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2789,
1583*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2803,
1584*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2805,
1585*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2815,
1586*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2924).
1587*5c90c05cSAndroid Build Coastguard Worker  Thanks @BRevzin, @Pokechu22, @setoye, @rtobar, @rbrugo, @anoonD and
1588*5c90c05cSAndroid Build Coastguard Worker  @leha-bot.
1589*5c90c05cSAndroid Build Coastguard Worker
1590*5c90c05cSAndroid Build Coastguard Worker- Improved build configuration
1591*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2766,
1592*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2772,
1593*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2836,
1594*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2852,
1595*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2907,
1596*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2913,
1597*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2914).
1598*5c90c05cSAndroid Build Coastguard Worker  Thanks @kambala-decapitator, @mattiasljungstrom, @kieselnb, @nathannaveen
1599*5c90c05cSAndroid Build Coastguard Worker  and @Vertexwahn.
1600*5c90c05cSAndroid Build Coastguard Worker
1601*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
1602*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2408,
1603*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2507,
1604*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2697,
1605*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2715,
1606*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2717,
1607*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2722,
1608*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2724,
1609*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2725,
1610*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2726,
1611*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2728,
1612*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2732,
1613*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2738,
1614*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2742,
1615*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2744,
1616*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2745,
1617*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2746,
1618*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2754,
1619*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2755,
1620*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2757,
1621*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2758,
1622*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2761,
1623*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2762,
1624*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2763,
1625*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2765,
1626*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2769,
1627*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2770,
1628*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2771,
1629*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2777,
1630*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2779,
1631*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2782,
1632*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2783,
1633*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2794,
1634*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2796,
1635*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2797,
1636*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2801,
1637*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2802,
1638*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2808,
1639*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2818,
1640*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2819,
1641*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2829,
1642*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2835,
1643*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2848,
1644*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2860,
1645*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2861,
1646*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2882,
1647*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2886,
1648*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2891,
1649*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2892,
1650*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2895,
1651*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2896,
1652*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2903,
1653*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2906,
1654*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2908,
1655*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2909,
1656*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2920,
1657*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2922,
1658*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2927,
1659*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2929,
1660*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2936,
1661*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2937,
1662*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2938,
1663*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2951,
1664*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2954,
1665*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2957,
1666*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2958,
1667*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2960).
1668*5c90c05cSAndroid Build Coastguard Worker  Thanks @matrackif @Tobi823, @ivan-volnov, @VasiliPupkin256,
1669*5c90c05cSAndroid Build Coastguard Worker  @federico-busato, @barcharcraz, @jk-jeon, @HazardyKnusperkeks, @dalboris,
1670*5c90c05cSAndroid Build Coastguard Worker  @seanm, @gsjaardema, @timsong-cpp, @seanm, @frithrah, @chronoxor, @Agga,
1671*5c90c05cSAndroid Build Coastguard Worker  @madmaxoft, @JurajX, @phprus and @Dani-Hub.
1672*5c90c05cSAndroid Build Coastguard Worker
1673*5c90c05cSAndroid Build Coastguard Worker# 8.1.1 - 2022-01-06
1674*5c90c05cSAndroid Build Coastguard Worker
1675*5c90c05cSAndroid Build Coastguard Worker- Restored ABI compatibility with version 8.0.x
1676*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2695,
1677*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2696). Thanks @saraedum.
1678*5c90c05cSAndroid Build Coastguard Worker- Fixed chrono formatting on big endian systems
1679*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2698,
1680*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2699).
1681*5c90c05cSAndroid Build Coastguard Worker  Thanks @phprus and @xvitaly.
1682*5c90c05cSAndroid Build Coastguard Worker- Fixed a linkage error with mingw
1683*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2691,
1684*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2692). Thanks @rbberger.
1685*5c90c05cSAndroid Build Coastguard Worker
1686*5c90c05cSAndroid Build Coastguard Worker# 8.1.0 - 2022-01-02
1687*5c90c05cSAndroid Build Coastguard Worker
1688*5c90c05cSAndroid Build Coastguard Worker- Optimized chrono formatting
1689*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2500,
1690*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2537,
1691*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2541,
1692*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2544,
1693*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2550,
1694*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2551,
1695*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2576,
1696*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2577,
1697*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2586,
1698*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2591,
1699*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2594,
1700*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2602,
1701*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2617,
1702*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2628,
1703*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2633,
1704*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2670,
1705*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2671).
1706*5c90c05cSAndroid Build Coastguard Worker
1707*5c90c05cSAndroid Build Coastguard Worker  Processing of some specifiers such as `%z` and `%Y` is now up to
1708*5c90c05cSAndroid Build Coastguard Worker  10-20 times faster, for example on GCC 11 with libstdc++:
1709*5c90c05cSAndroid Build Coastguard Worker
1710*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
1711*5c90c05cSAndroid Build Coastguard Worker      Benchmark                                  Before             After
1712*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
1713*5c90c05cSAndroid Build Coastguard Worker      FMTFormatter_z                             261 ns             26.3 ns
1714*5c90c05cSAndroid Build Coastguard Worker      FMTFormatterCompile_z                      246 ns             11.6 ns
1715*5c90c05cSAndroid Build Coastguard Worker      FMTFormatter_Y                             263 ns             26.1 ns
1716*5c90c05cSAndroid Build Coastguard Worker      FMTFormatterCompile_Y                      244 ns             10.5 ns
1717*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
1718*5c90c05cSAndroid Build Coastguard Worker
1719*5c90c05cSAndroid Build Coastguard Worker  Thanks @phprus and @toughengineer.
1720*5c90c05cSAndroid Build Coastguard Worker
1721*5c90c05cSAndroid Build Coastguard Worker- Implemented subsecond formatting for chrono durations
1722*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2623). For example
1723*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/es7vWTETe)):
1724*5c90c05cSAndroid Build Coastguard Worker
1725*5c90c05cSAndroid Build Coastguard Worker  ```c++
1726*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
1727*5c90c05cSAndroid Build Coastguard Worker
1728*5c90c05cSAndroid Build Coastguard Worker  int main() {
1729*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:%S}", std::chrono::milliseconds(1234));
1730*5c90c05cSAndroid Build Coastguard Worker  }
1731*5c90c05cSAndroid Build Coastguard Worker  ```
1732*5c90c05cSAndroid Build Coastguard Worker
1733*5c90c05cSAndroid Build Coastguard Worker  prints \"01.234\".
1734*5c90c05cSAndroid Build Coastguard Worker
1735*5c90c05cSAndroid Build Coastguard Worker  Thanks @matrackif.
1736*5c90c05cSAndroid Build Coastguard Worker
1737*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of precision 0 when formatting chrono durations
1738*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2587,
1739*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2588). Thanks @lukester1975.
1740*5c90c05cSAndroid Build Coastguard Worker
1741*5c90c05cSAndroid Build Coastguard Worker- Fixed an overflow on invalid inputs in the `tm` formatter
1742*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2564). Thanks @phprus.
1743*5c90c05cSAndroid Build Coastguard Worker
1744*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::group_digits` that formats integers with a non-localized
1745*5c90c05cSAndroid Build Coastguard Worker  digit separator (comma) for groups of three digits. For example
1746*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/TxGxG9Poq)):
1747*5c90c05cSAndroid Build Coastguard Worker
1748*5c90c05cSAndroid Build Coastguard Worker  ```c++
1749*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
1750*5c90c05cSAndroid Build Coastguard Worker
1751*5c90c05cSAndroid Build Coastguard Worker  int main() {
1752*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{} dollars", fmt::group_digits(1000000));
1753*5c90c05cSAndroid Build Coastguard Worker  }
1754*5c90c05cSAndroid Build Coastguard Worker  ```
1755*5c90c05cSAndroid Build Coastguard Worker
1756*5c90c05cSAndroid Build Coastguard Worker  prints \"1,000,000 dollars\".
1757*5c90c05cSAndroid Build Coastguard Worker
1758*5c90c05cSAndroid Build Coastguard Worker- Added support for faint, conceal, reverse and blink text styles
1759*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2394):
1760*5c90c05cSAndroid Build Coastguard Worker
1761*5c90c05cSAndroid Build Coastguard Worker  <https://user-images.githubusercontent.com/576385/147710227-c68f5317-f8fa-42c3-9123-7c4ba3c398cb.mp4>
1762*5c90c05cSAndroid Build Coastguard Worker
1763*5c90c05cSAndroid Build Coastguard Worker  Thanks @benit8 and @data-man.
1764*5c90c05cSAndroid Build Coastguard Worker
1765*5c90c05cSAndroid Build Coastguard Worker- Added experimental support for compile-time floating point
1766*5c90c05cSAndroid Build Coastguard Worker  formatting (https://github.com/fmtlib/fmt/pull/2426,
1767*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2470). It is currently
1768*5c90c05cSAndroid Build Coastguard Worker  limited to the header-only mode. Thanks @alexezeder.
1769*5c90c05cSAndroid Build Coastguard Worker
1770*5c90c05cSAndroid Build Coastguard Worker- Added UDL-based named argument support to compile-time format string
1771*5c90c05cSAndroid Build Coastguard Worker  checks (https://github.com/fmtlib/fmt/issues/2640,
1772*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2649). For example
1773*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/ohGbbvonv)):
1774*5c90c05cSAndroid Build Coastguard Worker
1775*5c90c05cSAndroid Build Coastguard Worker  ```c++
1776*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
1777*5c90c05cSAndroid Build Coastguard Worker
1778*5c90c05cSAndroid Build Coastguard Worker  int main() {
1779*5c90c05cSAndroid Build Coastguard Worker    using namespace fmt::literals;
1780*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{answer:s}", "answer"_a=42);
1781*5c90c05cSAndroid Build Coastguard Worker  }
1782*5c90c05cSAndroid Build Coastguard Worker  ```
1783*5c90c05cSAndroid Build Coastguard Worker
1784*5c90c05cSAndroid Build Coastguard Worker  gives a compile-time error on compilers with C++20 `consteval` and
1785*5c90c05cSAndroid Build Coastguard Worker  non-type template parameter support (gcc 10+) because `s` is not a
1786*5c90c05cSAndroid Build Coastguard Worker  valid format specifier for an integer.
1787*5c90c05cSAndroid Build Coastguard Worker
1788*5c90c05cSAndroid Build Coastguard Worker  Thanks @alexezeder.
1789*5c90c05cSAndroid Build Coastguard Worker
1790*5c90c05cSAndroid Build Coastguard Worker- Implemented escaping of string range elements. For example
1791*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/rKvM1vKf3)):
1792*5c90c05cSAndroid Build Coastguard Worker
1793*5c90c05cSAndroid Build Coastguard Worker  ```c++
1794*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ranges.h>
1795*5c90c05cSAndroid Build Coastguard Worker  #include <vector>
1796*5c90c05cSAndroid Build Coastguard Worker
1797*5c90c05cSAndroid Build Coastguard Worker  int main() {
1798*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}", std::vector<std::string>{"\naan"});
1799*5c90c05cSAndroid Build Coastguard Worker  }
1800*5c90c05cSAndroid Build Coastguard Worker  ```
1801*5c90c05cSAndroid Build Coastguard Worker
1802*5c90c05cSAndroid Build Coastguard Worker  is now printed as:
1803*5c90c05cSAndroid Build Coastguard Worker
1804*5c90c05cSAndroid Build Coastguard Worker      ["\naan"]
1805*5c90c05cSAndroid Build Coastguard Worker
1806*5c90c05cSAndroid Build Coastguard Worker  instead of:
1807*5c90c05cSAndroid Build Coastguard Worker
1808*5c90c05cSAndroid Build Coastguard Worker      ["
1809*5c90c05cSAndroid Build Coastguard Worker      aan"]
1810*5c90c05cSAndroid Build Coastguard Worker
1811*5c90c05cSAndroid Build Coastguard Worker- Added an experimental `?` specifier for escaping strings.
1812*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2674). Thanks @BRevzin.
1813*5c90c05cSAndroid Build Coastguard Worker
1814*5c90c05cSAndroid Build Coastguard Worker- Switched to JSON-like representation of maps and sets for
1815*5c90c05cSAndroid Build Coastguard Worker  consistency with Python\'s `str.format`. For example
1816*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/seKjoY9W5)):
1817*5c90c05cSAndroid Build Coastguard Worker
1818*5c90c05cSAndroid Build Coastguard Worker  ```c++
1819*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ranges.h>
1820*5c90c05cSAndroid Build Coastguard Worker  #include <map>
1821*5c90c05cSAndroid Build Coastguard Worker
1822*5c90c05cSAndroid Build Coastguard Worker  int main() {
1823*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}", std::map<std::string, int>{{"answer", 42}});
1824*5c90c05cSAndroid Build Coastguard Worker  }
1825*5c90c05cSAndroid Build Coastguard Worker  ```
1826*5c90c05cSAndroid Build Coastguard Worker
1827*5c90c05cSAndroid Build Coastguard Worker  is now printed as:
1828*5c90c05cSAndroid Build Coastguard Worker
1829*5c90c05cSAndroid Build Coastguard Worker      {"answer": 42}
1830*5c90c05cSAndroid Build Coastguard Worker
1831*5c90c05cSAndroid Build Coastguard Worker- Extended `fmt::join` to support C++20-only ranges
1832*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2549). Thanks @BRevzin.
1833*5c90c05cSAndroid Build Coastguard Worker
1834*5c90c05cSAndroid Build Coastguard Worker- Optimized handling of non-const-iterable ranges and implemented
1835*5c90c05cSAndroid Build Coastguard Worker  initial support for non-const-formattable types.
1836*5c90c05cSAndroid Build Coastguard Worker
1837*5c90c05cSAndroid Build Coastguard Worker- Disabled implicit conversions of scoped enums to integers that was
1838*5c90c05cSAndroid Build Coastguard Worker  accidentally introduced in earlier versions
1839*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1841).
1840*5c90c05cSAndroid Build Coastguard Worker
1841*5c90c05cSAndroid Build Coastguard Worker- Deprecated implicit conversion of `[const] signed char*` and
1842*5c90c05cSAndroid Build Coastguard Worker  `[const] unsigned char*` to C strings.
1843*5c90c05cSAndroid Build Coastguard Worker
1844*5c90c05cSAndroid Build Coastguard Worker- Deprecated `_format`, a legacy UDL-based format API
1845*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2646). Thanks @alexezeder.
1846*5c90c05cSAndroid Build Coastguard Worker
1847*5c90c05cSAndroid Build Coastguard Worker- Marked `format`, `formatted_size` and `to_string` as `[[nodiscard]]`
1848*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2612). @0x8000-0000.
1849*5c90c05cSAndroid Build Coastguard Worker
1850*5c90c05cSAndroid Build Coastguard Worker- Added missing diagnostic when trying to format function and member
1851*5c90c05cSAndroid Build Coastguard Worker  pointers as well as objects convertible to pointers which is
1852*5c90c05cSAndroid Build Coastguard Worker  explicitly disallowed
1853*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2598,
1854*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2609,
1855*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2610). Thanks @AlexGuteniev.
1856*5c90c05cSAndroid Build Coastguard Worker
1857*5c90c05cSAndroid Build Coastguard Worker- Optimized writing to a contiguous buffer with `format_to_n`
1858*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2489). Thanks @Roman-Koshelev.
1859*5c90c05cSAndroid Build Coastguard Worker
1860*5c90c05cSAndroid Build Coastguard Worker- Optimized writing to non-`char` buffers
1861*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2477). Thanks @Roman-Koshelev.
1862*5c90c05cSAndroid Build Coastguard Worker
1863*5c90c05cSAndroid Build Coastguard Worker- Decimal point is now localized when using the `L` specifier.
1864*5c90c05cSAndroid Build Coastguard Worker
1865*5c90c05cSAndroid Build Coastguard Worker- Improved floating point formatter implementation
1866*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2498,
1867*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2499). Thanks @Roman-Koshelev.
1868*5c90c05cSAndroid Build Coastguard Worker
1869*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of very large precision in fixed format
1870*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2616).
1871*5c90c05cSAndroid Build Coastguard Worker
1872*5c90c05cSAndroid Build Coastguard Worker- Made a table of cached powers used in FP formatting static
1873*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2509). Thanks @jk-jeon.
1874*5c90c05cSAndroid Build Coastguard Worker
1875*5c90c05cSAndroid Build Coastguard Worker- Resolved a lookup ambiguity with C++20 format-related functions due
1876*5c90c05cSAndroid Build Coastguard Worker  to ADL (https://github.com/fmtlib/fmt/issues/2639,
1877*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2641). Thanks @mkurdej.
1878*5c90c05cSAndroid Build Coastguard Worker
1879*5c90c05cSAndroid Build Coastguard Worker- Removed unnecessary inline namespace qualification
1880*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2642,
1881*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2643). Thanks @mkurdej.
1882*5c90c05cSAndroid Build Coastguard Worker
1883*5c90c05cSAndroid Build Coastguard Worker- Implemented argument forwarding in `format_to_n`
1884*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2462,
1885*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2463). Thanks @owent.
1886*5c90c05cSAndroid Build Coastguard Worker
1887*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of implicit conversions in `fmt::to_string` and
1888*5c90c05cSAndroid Build Coastguard Worker  format string compilation
1889*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2565).
1890*5c90c05cSAndroid Build Coastguard Worker
1891*5c90c05cSAndroid Build Coastguard Worker- Changed the default access mode of files created by
1892*5c90c05cSAndroid Build Coastguard Worker  `fmt::output_file` to `-rw-r--r--` for consistency with `fopen`
1893*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2530).
1894*5c90c05cSAndroid Build Coastguard Worker
1895*5c90c05cSAndroid Build Coastguard Worker- Make `fmt::ostream::flush` public
1896*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2435).
1897*5c90c05cSAndroid Build Coastguard Worker
1898*5c90c05cSAndroid Build Coastguard Worker- Improved C++14/17 attribute detection
1899*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2615). Thanks @AlexGuteniev.
1900*5c90c05cSAndroid Build Coastguard Worker
1901*5c90c05cSAndroid Build Coastguard Worker- Improved `consteval` detection for MSVC
1902*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2559). Thanks @DanielaE.
1903*5c90c05cSAndroid Build Coastguard Worker
1904*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
1905*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2406,
1906*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2446,
1907*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2493,
1908*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2513,
1909*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2515,
1910*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2522,
1911*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2562,
1912*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2575,
1913*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2606,
1914*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2620,
1915*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2676).
1916*5c90c05cSAndroid Build Coastguard Worker  Thanks @sobolevn, @UnePierre, @zhsj, @phprus, @ericcurtin and @Lounarok.
1917*5c90c05cSAndroid Build Coastguard Worker
1918*5c90c05cSAndroid Build Coastguard Worker- Improved fuzzers and added a fuzzer for chrono timepoint formatting
1919*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2461,
1920*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2469). @pauldreik,
1921*5c90c05cSAndroid Build Coastguard Worker
1922*5c90c05cSAndroid Build Coastguard Worker- Added the `FMT_SYSTEM_HEADERS` CMake option setting which marks
1923*5c90c05cSAndroid Build Coastguard Worker  {fmt}\'s headers as system. It can be used to suppress warnings
1924*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2644,
1925*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2651). Thanks @alexezeder.
1926*5c90c05cSAndroid Build Coastguard Worker
1927*5c90c05cSAndroid Build Coastguard Worker- Added the Bazel build system support
1928*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2505,
1929*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2516). Thanks @Vertexwahn.
1930*5c90c05cSAndroid Build Coastguard Worker
1931*5c90c05cSAndroid Build Coastguard Worker- Improved build configuration and tests
1932*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2437,
1933*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2558,
1934*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2648,
1935*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2650,
1936*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2663,
1937*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2677).
1938*5c90c05cSAndroid Build Coastguard Worker  Thanks @DanielaE, @alexezeder and @phprus.
1939*5c90c05cSAndroid Build Coastguard Worker
1940*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
1941*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2353,
1942*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2356,
1943*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2399,
1944*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2408,
1945*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2414,
1946*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2427,
1947*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2432,
1948*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2442,
1949*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2434,
1950*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2439,
1951*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2447,
1952*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2450,
1953*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2455,
1954*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2465,
1955*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2472,
1956*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2474,
1957*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2476,
1958*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2478,
1959*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2479,
1960*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2481,
1961*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2482,
1962*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2483,
1963*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2490,
1964*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2491,
1965*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2510,
1966*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2518,
1967*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2528,
1968*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2529,
1969*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2539,
1970*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2540,
1971*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2545,
1972*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2555,
1973*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2557,
1974*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2570,
1975*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2573,
1976*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2582,
1977*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2605,
1978*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2611,
1979*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2647,
1980*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2627,
1981*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2630,
1982*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2635,
1983*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2638,
1984*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2653,
1985*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2654,
1986*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2661,
1987*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2664,
1988*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2684).
1989*5c90c05cSAndroid Build Coastguard Worker  Thanks @DanielaE, @mwinterb, @cdacamar, @TrebledJ, @bodomartin, @cquammen,
1990*5c90c05cSAndroid Build Coastguard Worker  @white238, @mmarkeloff, @palacaze, @jcelerier, @mborn-adi, @BrukerJWD,
1991*5c90c05cSAndroid Build Coastguard Worker  @spyridon97, @phprus, @oliverlee, @joshessman-llnl, @akohlmey, @timkalu,
1992*5c90c05cSAndroid Build Coastguard Worker  @olupton, @Acretock, @alexezeder, @andrewcorrigan, @lucpelletier and
1993*5c90c05cSAndroid Build Coastguard Worker  @HazardyKnusperkeks.
1994*5c90c05cSAndroid Build Coastguard Worker
1995*5c90c05cSAndroid Build Coastguard Worker# 8.0.1 - 2021-07-02
1996*5c90c05cSAndroid Build Coastguard Worker
1997*5c90c05cSAndroid Build Coastguard Worker- Fixed the version number in the inline namespace
1998*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2374).
1999*5c90c05cSAndroid Build Coastguard Worker- Added a missing presentation type check for `std::string`
2000*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2402).
2001*5c90c05cSAndroid Build Coastguard Worker- Fixed a linkage error when mixing code built with clang and gcc
2002*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2377).
2003*5c90c05cSAndroid Build Coastguard Worker- Fixed documentation issues
2004*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2396,
2005*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2403,
2006*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2406). Thanks @mkurdej.
2007*5c90c05cSAndroid Build Coastguard Worker- Removed dead code in FP formatter (
2008*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2398). Thanks @javierhonduco.
2009*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
2010*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2351,
2011*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2359,
2012*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2365,
2013*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2368,
2014*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2370,
2015*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2376,
2016*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2381,
2017*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2382,
2018*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2386,
2019*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2389,
2020*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2395,
2021*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2397,
2022*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2400,
2023*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2401,
2024*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2407).
2025*5c90c05cSAndroid Build Coastguard Worker  Thanks @zx2c4, @AidanSun05, @mattiasljungstrom, @joemmett, @erengy,
2026*5c90c05cSAndroid Build Coastguard Worker  @patlkli, @gsjaardema and @phprus.
2027*5c90c05cSAndroid Build Coastguard Worker
2028*5c90c05cSAndroid Build Coastguard Worker# 8.0.0 - 2021-06-21
2029*5c90c05cSAndroid Build Coastguard Worker
2030*5c90c05cSAndroid Build Coastguard Worker- Enabled compile-time format string checks by default. For example
2031*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/sMxcohGjz)):
2032*5c90c05cSAndroid Build Coastguard Worker
2033*5c90c05cSAndroid Build Coastguard Worker  ```c++
2034*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
2035*5c90c05cSAndroid Build Coastguard Worker
2036*5c90c05cSAndroid Build Coastguard Worker  int main() {
2037*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:d}", "I am not a number");
2038*5c90c05cSAndroid Build Coastguard Worker  }
2039*5c90c05cSAndroid Build Coastguard Worker  ```
2040*5c90c05cSAndroid Build Coastguard Worker
2041*5c90c05cSAndroid Build Coastguard Worker  gives a compile-time error on compilers with C++20 `consteval`
2042*5c90c05cSAndroid Build Coastguard Worker  support (gcc 10+, clang 11+) because `d` is not a valid format
2043*5c90c05cSAndroid Build Coastguard Worker  specifier for a string.
2044*5c90c05cSAndroid Build Coastguard Worker
2045*5c90c05cSAndroid Build Coastguard Worker  To pass a runtime string wrap it in `fmt::runtime`:
2046*5c90c05cSAndroid Build Coastguard Worker
2047*5c90c05cSAndroid Build Coastguard Worker  ```c++
2048*5c90c05cSAndroid Build Coastguard Worker  fmt::print(fmt::runtime("{:d}"), "I am not a number");
2049*5c90c05cSAndroid Build Coastguard Worker  ```
2050*5c90c05cSAndroid Build Coastguard Worker
2051*5c90c05cSAndroid Build Coastguard Worker- Added compile-time formatting
2052*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2019,
2053*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2044,
2054*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2056,
2055*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2072,
2056*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2075,
2057*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2078,
2058*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2129,
2059*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2326). For example
2060*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/Mxx9d89jM)):
2061*5c90c05cSAndroid Build Coastguard Worker
2062*5c90c05cSAndroid Build Coastguard Worker  ```c++
2063*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/compile.h>
2064*5c90c05cSAndroid Build Coastguard Worker
2065*5c90c05cSAndroid Build Coastguard Worker  consteval auto compile_time_itoa(int value) -> std::array<char, 10> {
2066*5c90c05cSAndroid Build Coastguard Worker    auto result = std::array<char, 10>();
2067*5c90c05cSAndroid Build Coastguard Worker    fmt::format_to(result.data(), FMT_COMPILE("{}"), value);
2068*5c90c05cSAndroid Build Coastguard Worker    return result;
2069*5c90c05cSAndroid Build Coastguard Worker  }
2070*5c90c05cSAndroid Build Coastguard Worker
2071*5c90c05cSAndroid Build Coastguard Worker  constexpr auto answer = compile_time_itoa(42);
2072*5c90c05cSAndroid Build Coastguard Worker  ```
2073*5c90c05cSAndroid Build Coastguard Worker
2074*5c90c05cSAndroid Build Coastguard Worker  Most of the formatting functionality is available at compile time
2075*5c90c05cSAndroid Build Coastguard Worker  with a notable exception of floating-point numbers and pointers.
2076*5c90c05cSAndroid Build Coastguard Worker  Thanks @alexezeder.
2077*5c90c05cSAndroid Build Coastguard Worker
2078*5c90c05cSAndroid Build Coastguard Worker- Optimized handling of format specifiers during format string
2079*5c90c05cSAndroid Build Coastguard Worker  compilation. For example, hexadecimal formatting (`"{:x}"`) is now
2080*5c90c05cSAndroid Build Coastguard Worker  3-7x faster than before when using `format_to` with format string
2081*5c90c05cSAndroid Build Coastguard Worker  compilation and a stack-allocated buffer
2082*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1944).
2083*5c90c05cSAndroid Build Coastguard Worker
2084*5c90c05cSAndroid Build Coastguard Worker  Before (7.1.3):
2085*5c90c05cSAndroid Build Coastguard Worker
2086*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
2087*5c90c05cSAndroid Build Coastguard Worker      Benchmark                                  Time             CPU   Iterations
2088*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
2089*5c90c05cSAndroid Build Coastguard Worker      FMTCompileOld/0                         15.5 ns         15.5 ns     43302898
2090*5c90c05cSAndroid Build Coastguard Worker      FMTCompileOld/42                        16.6 ns         16.6 ns     43278267
2091*5c90c05cSAndroid Build Coastguard Worker      FMTCompileOld/273123                    18.7 ns         18.6 ns     37035861
2092*5c90c05cSAndroid Build Coastguard Worker      FMTCompileOld/9223372036854775807       19.4 ns         19.4 ns     35243000
2093*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
2094*5c90c05cSAndroid Build Coastguard Worker
2095*5c90c05cSAndroid Build Coastguard Worker  After (8.x):
2096*5c90c05cSAndroid Build Coastguard Worker
2097*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
2098*5c90c05cSAndroid Build Coastguard Worker      Benchmark                                  Time             CPU   Iterations
2099*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
2100*5c90c05cSAndroid Build Coastguard Worker      FMTCompileNew/0                         1.99 ns         1.99 ns    360523686
2101*5c90c05cSAndroid Build Coastguard Worker      FMTCompileNew/42                        2.33 ns         2.33 ns    279865664
2102*5c90c05cSAndroid Build Coastguard Worker      FMTCompileNew/273123                    3.72 ns         3.71 ns    190230315
2103*5c90c05cSAndroid Build Coastguard Worker      FMTCompileNew/9223372036854775807       5.28 ns         5.26 ns    130711631
2104*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
2105*5c90c05cSAndroid Build Coastguard Worker
2106*5c90c05cSAndroid Build Coastguard Worker  It is even faster than `std::to_chars` from libc++ compiled with
2107*5c90c05cSAndroid Build Coastguard Worker  clang on macOS:
2108*5c90c05cSAndroid Build Coastguard Worker
2109*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
2110*5c90c05cSAndroid Build Coastguard Worker      Benchmark                                  Time             CPU   Iterations
2111*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
2112*5c90c05cSAndroid Build Coastguard Worker      ToChars/0                               4.42 ns         4.41 ns    160196630
2113*5c90c05cSAndroid Build Coastguard Worker      ToChars/42                              5.00 ns         4.98 ns    140735201
2114*5c90c05cSAndroid Build Coastguard Worker      ToChars/273123                          7.26 ns         7.24 ns     95784130
2115*5c90c05cSAndroid Build Coastguard Worker      ToChars/9223372036854775807             8.77 ns         8.75 ns     75872534
2116*5c90c05cSAndroid Build Coastguard Worker      ----------------------------------------------------------------------------
2117*5c90c05cSAndroid Build Coastguard Worker
2118*5c90c05cSAndroid Build Coastguard Worker  In other cases, especially involving `std::string` construction, the
2119*5c90c05cSAndroid Build Coastguard Worker  speed up is usually lower because handling format specifiers takes a
2120*5c90c05cSAndroid Build Coastguard Worker  smaller fraction of the total time.
2121*5c90c05cSAndroid Build Coastguard Worker
2122*5c90c05cSAndroid Build Coastguard Worker- Added the `_cf` user-defined literal to represent a compiled format
2123*5c90c05cSAndroid Build Coastguard Worker  string. It can be used instead of the `FMT_COMPILE` macro
2124*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2043,
2125*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2242):
2126*5c90c05cSAndroid Build Coastguard Worker
2127*5c90c05cSAndroid Build Coastguard Worker  ```c++
2128*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/compile.h>
2129*5c90c05cSAndroid Build Coastguard Worker
2130*5c90c05cSAndroid Build Coastguard Worker  using namespace fmt::literals;
2131*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format(FMT_COMPILE("{}"), 42); // �� not modern
2132*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format("{}"_cf, 42);           // �� modern as hell
2133*5c90c05cSAndroid Build Coastguard Worker  ```
2134*5c90c05cSAndroid Build Coastguard Worker
2135*5c90c05cSAndroid Build Coastguard Worker  It requires compiler support for class types in non-type template
2136*5c90c05cSAndroid Build Coastguard Worker  parameters (a C++20 feature) which is available in GCC 9.3+.
2137*5c90c05cSAndroid Build Coastguard Worker  Thanks @alexezeder.
2138*5c90c05cSAndroid Build Coastguard Worker
2139*5c90c05cSAndroid Build Coastguard Worker- Format string compilation now requires `format` functions of
2140*5c90c05cSAndroid Build Coastguard Worker  `formatter` specializations for user-defined types to be `const`:
2141*5c90c05cSAndroid Build Coastguard Worker
2142*5c90c05cSAndroid Build Coastguard Worker  ```c++
2143*5c90c05cSAndroid Build Coastguard Worker  template <> struct fmt::formatter<my_type>: formatter<string_view> {
2144*5c90c05cSAndroid Build Coastguard Worker    template <typename FormatContext>
2145*5c90c05cSAndroid Build Coastguard Worker    auto format(my_type obj, FormatContext& ctx) const {  // Note const here.
2146*5c90c05cSAndroid Build Coastguard Worker      // ...
2147*5c90c05cSAndroid Build Coastguard Worker    }
2148*5c90c05cSAndroid Build Coastguard Worker  };
2149*5c90c05cSAndroid Build Coastguard Worker  ```
2150*5c90c05cSAndroid Build Coastguard Worker
2151*5c90c05cSAndroid Build Coastguard Worker- Added UDL-based named argument support to format string compilation
2152*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2243,
2153*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2281). For example:
2154*5c90c05cSAndroid Build Coastguard Worker
2155*5c90c05cSAndroid Build Coastguard Worker  ```c++
2156*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/compile.h>
2157*5c90c05cSAndroid Build Coastguard Worker
2158*5c90c05cSAndroid Build Coastguard Worker  using namespace fmt::literals;
2159*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format(FMT_COMPILE("{answer}"), "answer"_a = 42);
2160*5c90c05cSAndroid Build Coastguard Worker  ```
2161*5c90c05cSAndroid Build Coastguard Worker
2162*5c90c05cSAndroid Build Coastguard Worker  Here the argument named \"answer\" is resolved at compile time with
2163*5c90c05cSAndroid Build Coastguard Worker  no runtime overhead. Thanks @alexezeder.
2164*5c90c05cSAndroid Build Coastguard Worker
2165*5c90c05cSAndroid Build Coastguard Worker- Added format string compilation support to `fmt::print`
2166*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2280,
2167*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2304). Thanks @alexezeder.
2168*5c90c05cSAndroid Build Coastguard Worker
2169*5c90c05cSAndroid Build Coastguard Worker- Added initial support for compiling {fmt} as a C++20 module
2170*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2235,
2171*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2240,
2172*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2260,
2173*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2282,
2174*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2283,
2175*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2288,
2176*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2298,
2177*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2306,
2178*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2307,
2179*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2309,
2180*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2318,
2181*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2324,
2182*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2332,
2183*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2340). Thanks @DanielaE.
2184*5c90c05cSAndroid Build Coastguard Worker
2185*5c90c05cSAndroid Build Coastguard Worker- Made symbols private by default reducing shared library size
2186*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2301). For example
2187*5c90c05cSAndroid Build Coastguard Worker  there was a \~15% reported reduction on one platform. Thanks @sergiud.
2188*5c90c05cSAndroid Build Coastguard Worker
2189*5c90c05cSAndroid Build Coastguard Worker- Optimized includes making the result of preprocessing `fmt/format.h`
2190*5c90c05cSAndroid Build Coastguard Worker  \~20% smaller with libstdc++/C++20 and slightly improving build
2191*5c90c05cSAndroid Build Coastguard Worker  times (https://github.com/fmtlib/fmt/issues/1998).
2192*5c90c05cSAndroid Build Coastguard Worker
2193*5c90c05cSAndroid Build Coastguard Worker- Added support of ranges with non-const `begin` / `end`
2194*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1953). Thanks @kitegi.
2195*5c90c05cSAndroid Build Coastguard Worker
2196*5c90c05cSAndroid Build Coastguard Worker- Added support of `std::byte` and other formattable types to
2197*5c90c05cSAndroid Build Coastguard Worker  `fmt::join` (https://github.com/fmtlib/fmt/issues/1981,
2198*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2040,
2199*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2050,
2200*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2262). For example:
2201*5c90c05cSAndroid Build Coastguard Worker
2202*5c90c05cSAndroid Build Coastguard Worker  ```c++
2203*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
2204*5c90c05cSAndroid Build Coastguard Worker  #include <cstddef>
2205*5c90c05cSAndroid Build Coastguard Worker  #include <vector>
2206*5c90c05cSAndroid Build Coastguard Worker
2207*5c90c05cSAndroid Build Coastguard Worker  int main() {
2208*5c90c05cSAndroid Build Coastguard Worker    auto bytes = std::vector{std::byte(4), std::byte(2)};
2209*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}", fmt::join(bytes, ""));
2210*5c90c05cSAndroid Build Coastguard Worker  }
2211*5c90c05cSAndroid Build Coastguard Worker  ```
2212*5c90c05cSAndroid Build Coastguard Worker
2213*5c90c05cSAndroid Build Coastguard Worker  prints \"42\".
2214*5c90c05cSAndroid Build Coastguard Worker
2215*5c90c05cSAndroid Build Coastguard Worker  Thanks @kamibo.
2216*5c90c05cSAndroid Build Coastguard Worker
2217*5c90c05cSAndroid Build Coastguard Worker- Implemented the default format for `std::chrono::system_clock`
2218*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2319,
2219*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2345). For example:
2220*5c90c05cSAndroid Build Coastguard Worker
2221*5c90c05cSAndroid Build Coastguard Worker  ```c++
2222*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
2223*5c90c05cSAndroid Build Coastguard Worker
2224*5c90c05cSAndroid Build Coastguard Worker  int main() {
2225*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}", std::chrono::system_clock::now());
2226*5c90c05cSAndroid Build Coastguard Worker  }
2227*5c90c05cSAndroid Build Coastguard Worker  ```
2228*5c90c05cSAndroid Build Coastguard Worker
2229*5c90c05cSAndroid Build Coastguard Worker  prints \"2021-06-18 15:22:00\" (the output depends on the current
2230*5c90c05cSAndroid Build Coastguard Worker  date and time). Thanks @sunmy2019.
2231*5c90c05cSAndroid Build Coastguard Worker
2232*5c90c05cSAndroid Build Coastguard Worker- Made more chrono specifiers locale independent by default. Use the
2233*5c90c05cSAndroid Build Coastguard Worker  `'L'` specifier to get localized formatting. For example:
2234*5c90c05cSAndroid Build Coastguard Worker
2235*5c90c05cSAndroid Build Coastguard Worker  ```c++
2236*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
2237*5c90c05cSAndroid Build Coastguard Worker
2238*5c90c05cSAndroid Build Coastguard Worker  int main() {
2239*5c90c05cSAndroid Build Coastguard Worker    std::locale::global(std::locale("ru_RU.UTF-8"));
2240*5c90c05cSAndroid Build Coastguard Worker    auto monday = std::chrono::weekday(1);
2241*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}\n", monday);   // prints "Mon"
2242*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:L}\n", monday); // prints "пн"
2243*5c90c05cSAndroid Build Coastguard Worker  }
2244*5c90c05cSAndroid Build Coastguard Worker  ```
2245*5c90c05cSAndroid Build Coastguard Worker
2246*5c90c05cSAndroid Build Coastguard Worker- Improved locale handling in chrono formatting
2247*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2337,
2248*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2349,
2249*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2350). Thanks @phprus.
2250*5c90c05cSAndroid Build Coastguard Worker
2251*5c90c05cSAndroid Build Coastguard Worker- Deprecated `fmt/locale.h` moving the formatting functions that take
2252*5c90c05cSAndroid Build Coastguard Worker  a locale to `fmt/format.h` (`char`) and `fmt/xchar` (other
2253*5c90c05cSAndroid Build Coastguard Worker  overloads). This doesn\'t introduce a dependency on `<locale>` so
2254*5c90c05cSAndroid Build Coastguard Worker  there is virtually no compile time effect.
2255*5c90c05cSAndroid Build Coastguard Worker
2256*5c90c05cSAndroid Build Coastguard Worker- Deprecated an undocumented `format_to` overload that takes
2257*5c90c05cSAndroid Build Coastguard Worker  `basic_memory_buffer`.
2258*5c90c05cSAndroid Build Coastguard Worker
2259*5c90c05cSAndroid Build Coastguard Worker- Made parameter order in `vformat_to` consistent with `format_to`
2260*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2327).
2261*5c90c05cSAndroid Build Coastguard Worker
2262*5c90c05cSAndroid Build Coastguard Worker- Added support for time points with arbitrary durations
2263*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2208). For example:
2264*5c90c05cSAndroid Build Coastguard Worker
2265*5c90c05cSAndroid Build Coastguard Worker  ```c++
2266*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
2267*5c90c05cSAndroid Build Coastguard Worker
2268*5c90c05cSAndroid Build Coastguard Worker  int main() {
2269*5c90c05cSAndroid Build Coastguard Worker    using tp = std::chrono::time_point<
2270*5c90c05cSAndroid Build Coastguard Worker      std::chrono::system_clock, std::chrono::seconds>;
2271*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:%S}", tp(std::chrono::seconds(42)));
2272*5c90c05cSAndroid Build Coastguard Worker  }
2273*5c90c05cSAndroid Build Coastguard Worker  ```
2274*5c90c05cSAndroid Build Coastguard Worker
2275*5c90c05cSAndroid Build Coastguard Worker  prints \"42\".
2276*5c90c05cSAndroid Build Coastguard Worker
2277*5c90c05cSAndroid Build Coastguard Worker- Formatting floating-point numbers no longer produces trailing zeros
2278*5c90c05cSAndroid Build Coastguard Worker  by default for consistency with `std::format`. For example:
2279*5c90c05cSAndroid Build Coastguard Worker
2280*5c90c05cSAndroid Build Coastguard Worker  ```c++
2281*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
2282*5c90c05cSAndroid Build Coastguard Worker
2283*5c90c05cSAndroid Build Coastguard Worker  int main() {
2284*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{0:.3}", 1.1);
2285*5c90c05cSAndroid Build Coastguard Worker  }
2286*5c90c05cSAndroid Build Coastguard Worker  ```
2287*5c90c05cSAndroid Build Coastguard Worker
2288*5c90c05cSAndroid Build Coastguard Worker  prints \"1.1\". Use the `'#'` specifier to keep trailing zeros.
2289*5c90c05cSAndroid Build Coastguard Worker
2290*5c90c05cSAndroid Build Coastguard Worker- Dropped a limit on the number of elements in a range and replaced
2291*5c90c05cSAndroid Build Coastguard Worker  `{}` with `[]` as range delimiters for consistency with Python\'s
2292*5c90c05cSAndroid Build Coastguard Worker  `str.format`.
2293*5c90c05cSAndroid Build Coastguard Worker
2294*5c90c05cSAndroid Build Coastguard Worker- The `'L'` specifier for locale-specific numeric formatting can now
2295*5c90c05cSAndroid Build Coastguard Worker  be combined with presentation specifiers as in `std::format`. For
2296*5c90c05cSAndroid Build Coastguard Worker  example:
2297*5c90c05cSAndroid Build Coastguard Worker
2298*5c90c05cSAndroid Build Coastguard Worker  ```c++
2299*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
2300*5c90c05cSAndroid Build Coastguard Worker  #include <locale>
2301*5c90c05cSAndroid Build Coastguard Worker
2302*5c90c05cSAndroid Build Coastguard Worker  int main() {
2303*5c90c05cSAndroid Build Coastguard Worker    std::locale::global(std::locale("fr_FR.UTF-8"));
2304*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{0:.2Lf}", 0.42);
2305*5c90c05cSAndroid Build Coastguard Worker  }
2306*5c90c05cSAndroid Build Coastguard Worker  ```
2307*5c90c05cSAndroid Build Coastguard Worker
2308*5c90c05cSAndroid Build Coastguard Worker  prints \"0,42\". The deprecated `'n'` specifier has been removed.
2309*5c90c05cSAndroid Build Coastguard Worker
2310*5c90c05cSAndroid Build Coastguard Worker- Made the `0` specifier ignored for infinity and NaN
2311*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2305,
2312*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2310). Thanks @Liedtke.
2313*5c90c05cSAndroid Build Coastguard Worker
2314*5c90c05cSAndroid Build Coastguard Worker- Made the hexfloat formatting use the right alignment by default
2315*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2308,
2316*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2317). Thanks @Liedtke.
2317*5c90c05cSAndroid Build Coastguard Worker
2318*5c90c05cSAndroid Build Coastguard Worker- Removed the deprecated numeric alignment (`'='`). Use the `'0'`
2319*5c90c05cSAndroid Build Coastguard Worker  specifier instead.
2320*5c90c05cSAndroid Build Coastguard Worker
2321*5c90c05cSAndroid Build Coastguard Worker- Removed the deprecated `fmt/posix.h` header that has been replaced
2322*5c90c05cSAndroid Build Coastguard Worker  with `fmt/os.h`.
2323*5c90c05cSAndroid Build Coastguard Worker
2324*5c90c05cSAndroid Build Coastguard Worker- Removed the deprecated `format_to_n_context`, `format_to_n_args` and
2325*5c90c05cSAndroid Build Coastguard Worker  `make_format_to_n_args`. They have been replaced with
2326*5c90c05cSAndroid Build Coastguard Worker  `format_context`, `` format_args` and ``make_format_args\`\`
2327*5c90c05cSAndroid Build Coastguard Worker  respectively.
2328*5c90c05cSAndroid Build Coastguard Worker
2329*5c90c05cSAndroid Build Coastguard Worker- Moved `wchar_t`-specific functions and types to `fmt/xchar.h`. You
2330*5c90c05cSAndroid Build Coastguard Worker  can define `FMT_DEPRECATED_INCLUDE_XCHAR` to automatically include
2331*5c90c05cSAndroid Build Coastguard Worker  `fmt/xchar.h` from `fmt/format.h` but this will be disabled in the
2332*5c90c05cSAndroid Build Coastguard Worker  next major release.
2333*5c90c05cSAndroid Build Coastguard Worker
2334*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of the `'+'` specifier in localized formatting
2335*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2133).
2336*5c90c05cSAndroid Build Coastguard Worker
2337*5c90c05cSAndroid Build Coastguard Worker- Added support for the `'s'` format specifier that gives textual
2338*5c90c05cSAndroid Build Coastguard Worker  representation of `bool`
2339*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2094,
2340*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2109). For example:
2341*5c90c05cSAndroid Build Coastguard Worker
2342*5c90c05cSAndroid Build Coastguard Worker  ```c++
2343*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
2344*5c90c05cSAndroid Build Coastguard Worker
2345*5c90c05cSAndroid Build Coastguard Worker  int main() {
2346*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:s}", true);
2347*5c90c05cSAndroid Build Coastguard Worker  }
2348*5c90c05cSAndroid Build Coastguard Worker  ```
2349*5c90c05cSAndroid Build Coastguard Worker
2350*5c90c05cSAndroid Build Coastguard Worker  prints \"true\". Thanks @powercoderlol.
2351*5c90c05cSAndroid Build Coastguard Worker
2352*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::ptr` work with function pointers
2353*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2131). For example:
2354*5c90c05cSAndroid Build Coastguard Worker
2355*5c90c05cSAndroid Build Coastguard Worker  ```c++
2356*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
2357*5c90c05cSAndroid Build Coastguard Worker
2358*5c90c05cSAndroid Build Coastguard Worker  int main() {
2359*5c90c05cSAndroid Build Coastguard Worker    fmt::print("My main: {}\n", fmt::ptr(main));
2360*5c90c05cSAndroid Build Coastguard Worker  }
2361*5c90c05cSAndroid Build Coastguard Worker  ```
2362*5c90c05cSAndroid Build Coastguard Worker
2363*5c90c05cSAndroid Build Coastguard Worker  Thanks @mikecrowe.
2364*5c90c05cSAndroid Build Coastguard Worker
2365*5c90c05cSAndroid Build Coastguard Worker- The undocumented support for specializing `formatter` for pointer
2366*5c90c05cSAndroid Build Coastguard Worker  types has been removed.
2367*5c90c05cSAndroid Build Coastguard Worker
2368*5c90c05cSAndroid Build Coastguard Worker- Fixed `fmt::formatted_size` with format string compilation
2369*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2141,
2370*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2161). Thanks @alexezeder.
2371*5c90c05cSAndroid Build Coastguard Worker
2372*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of empty format strings during format string
2373*5c90c05cSAndroid Build Coastguard Worker  compilation (https://github.com/fmtlib/fmt/issues/2042):
2374*5c90c05cSAndroid Build Coastguard Worker
2375*5c90c05cSAndroid Build Coastguard Worker  ```c++
2376*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format(FMT_COMPILE(""));
2377*5c90c05cSAndroid Build Coastguard Worker  ```
2378*5c90c05cSAndroid Build Coastguard Worker
2379*5c90c05cSAndroid Build Coastguard Worker  Thanks @alexezeder.
2380*5c90c05cSAndroid Build Coastguard Worker
2381*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of enums in `fmt::to_string`
2382*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2036).
2383*5c90c05cSAndroid Build Coastguard Worker
2384*5c90c05cSAndroid Build Coastguard Worker- Improved width computation
2385*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2033,
2386*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2091). For example:
2387*5c90c05cSAndroid Build Coastguard Worker
2388*5c90c05cSAndroid Build Coastguard Worker  ```c++
2389*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
2390*5c90c05cSAndroid Build Coastguard Worker
2391*5c90c05cSAndroid Build Coastguard Worker  int main() {
2392*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:-<10}{}\n", "你好", "世界");
2393*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:-<10}{}\n", "hello", "world");
2394*5c90c05cSAndroid Build Coastguard Worker  }
2395*5c90c05cSAndroid Build Coastguard Worker  ```
2396*5c90c05cSAndroid Build Coastguard Worker
2397*5c90c05cSAndroid Build Coastguard Worker  prints
2398*5c90c05cSAndroid Build Coastguard Worker
2399*5c90c05cSAndroid Build Coastguard Worker  ![](https://user-images.githubusercontent.com/576385/119840373-cea3ca80-beb9-11eb-91e0-54266c48e181.png)
2400*5c90c05cSAndroid Build Coastguard Worker
2401*5c90c05cSAndroid Build Coastguard Worker  on a modern terminal.
2402*5c90c05cSAndroid Build Coastguard Worker
2403*5c90c05cSAndroid Build Coastguard Worker- The experimental fast output stream (`fmt::ostream`) is now
2404*5c90c05cSAndroid Build Coastguard Worker  truncated by default for consistency with `fopen`
2405*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2018). For example:
2406*5c90c05cSAndroid Build Coastguard Worker
2407*5c90c05cSAndroid Build Coastguard Worker  ```c++
2408*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/os.h>
2409*5c90c05cSAndroid Build Coastguard Worker
2410*5c90c05cSAndroid Build Coastguard Worker  int main() {
2411*5c90c05cSAndroid Build Coastguard Worker    fmt::ostream out1 = fmt::output_file("guide");
2412*5c90c05cSAndroid Build Coastguard Worker    out1.print("Zaphod");
2413*5c90c05cSAndroid Build Coastguard Worker    out1.close();
2414*5c90c05cSAndroid Build Coastguard Worker    fmt::ostream out2 = fmt::output_file("guide");
2415*5c90c05cSAndroid Build Coastguard Worker    out2.print("Ford");
2416*5c90c05cSAndroid Build Coastguard Worker  }
2417*5c90c05cSAndroid Build Coastguard Worker  ```
2418*5c90c05cSAndroid Build Coastguard Worker
2419*5c90c05cSAndroid Build Coastguard Worker  writes \"Ford\" to the file \"guide\". To preserve the old file
2420*5c90c05cSAndroid Build Coastguard Worker  content if any pass `fmt::file::WRONLY | fmt::file::CREATE` flags to
2421*5c90c05cSAndroid Build Coastguard Worker  `fmt::output_file`.
2422*5c90c05cSAndroid Build Coastguard Worker
2423*5c90c05cSAndroid Build Coastguard Worker- Fixed moving of `fmt::ostream` that holds buffered data
2424*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2197,
2425*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2198). Thanks @vtta.
2426*5c90c05cSAndroid Build Coastguard Worker
2427*5c90c05cSAndroid Build Coastguard Worker- Replaced the `fmt::system_error` exception with a function of the
2428*5c90c05cSAndroid Build Coastguard Worker  same name that constructs `std::system_error`
2429*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2266).
2430*5c90c05cSAndroid Build Coastguard Worker
2431*5c90c05cSAndroid Build Coastguard Worker- Replaced the `fmt::windows_error` exception with a function of the
2432*5c90c05cSAndroid Build Coastguard Worker  same name that constructs `std::system_error` with the category
2433*5c90c05cSAndroid Build Coastguard Worker  returned by `fmt::system_category()`
2434*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2274,
2435*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2275). The latter is
2436*5c90c05cSAndroid Build Coastguard Worker  similar to `std::system_category` but correctly handles UTF-8.
2437*5c90c05cSAndroid Build Coastguard Worker  Thanks @phprus.
2438*5c90c05cSAndroid Build Coastguard Worker
2439*5c90c05cSAndroid Build Coastguard Worker- Replaced `fmt::error_code` with `std::error_code` and made it
2440*5c90c05cSAndroid Build Coastguard Worker  formattable (https://github.com/fmtlib/fmt/issues/2269,
2441*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2270,
2442*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2273). Thanks @phprus.
2443*5c90c05cSAndroid Build Coastguard Worker
2444*5c90c05cSAndroid Build Coastguard Worker- Added speech synthesis support
2445*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2206).
2446*5c90c05cSAndroid Build Coastguard Worker
2447*5c90c05cSAndroid Build Coastguard Worker- Made `format_to` work with a memory buffer that has a custom
2448*5c90c05cSAndroid Build Coastguard Worker  allocator (https://github.com/fmtlib/fmt/pull/2300).
2449*5c90c05cSAndroid Build Coastguard Worker  Thanks @voxmea.
2450*5c90c05cSAndroid Build Coastguard Worker
2451*5c90c05cSAndroid Build Coastguard Worker- Added `Allocator::max_size` support to `basic_memory_buffer`.
2452*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1960). Thanks @phprus.
2453*5c90c05cSAndroid Build Coastguard Worker
2454*5c90c05cSAndroid Build Coastguard Worker- Added wide string support to `fmt::join`
2455*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2236). Thanks @crbrz.
2456*5c90c05cSAndroid Build Coastguard Worker
2457*5c90c05cSAndroid Build Coastguard Worker- Made iterators passed to `formatter` specializations via a format
2458*5c90c05cSAndroid Build Coastguard Worker  context satisfy C++20 `std::output_iterator` requirements
2459*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2156,
2460*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2158,
2461*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2195,
2462*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2204). Thanks @randomnetcat.
2463*5c90c05cSAndroid Build Coastguard Worker
2464*5c90c05cSAndroid Build Coastguard Worker- Optimized the `printf` implementation
2465*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1982,
2466*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1984,
2467*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2016,
2468*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2164).
2469*5c90c05cSAndroid Build Coastguard Worker  Thanks @rimathia and @moiwi.
2470*5c90c05cSAndroid Build Coastguard Worker
2471*5c90c05cSAndroid Build Coastguard Worker- Improved detection of `constexpr` `char_traits`
2472*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2246,
2473*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2257). Thanks @phprus.
2474*5c90c05cSAndroid Build Coastguard Worker
2475*5c90c05cSAndroid Build Coastguard Worker- Fixed writing to `stdout` when it is redirected to `NUL` on Windows
2476*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2080).
2477*5c90c05cSAndroid Build Coastguard Worker
2478*5c90c05cSAndroid Build Coastguard Worker- Fixed exception propagation from iterators
2479*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2097).
2480*5c90c05cSAndroid Build Coastguard Worker
2481*5c90c05cSAndroid Build Coastguard Worker- Improved `strftime` error handling
2482*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2238,
2483*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2244). Thanks @yumeyao.
2484*5c90c05cSAndroid Build Coastguard Worker
2485*5c90c05cSAndroid Build Coastguard Worker- Stopped using deprecated GCC UDL template extension.
2486*5c90c05cSAndroid Build Coastguard Worker
2487*5c90c05cSAndroid Build Coastguard Worker- Added `fmt/args.h` to the install target
2488*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2096).
2489*5c90c05cSAndroid Build Coastguard Worker
2490*5c90c05cSAndroid Build Coastguard Worker- Error messages are now passed to assert when exceptions are disabled
2491*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2145). Thanks @NobodyXu.
2492*5c90c05cSAndroid Build Coastguard Worker
2493*5c90c05cSAndroid Build Coastguard Worker- Added the `FMT_MASTER_PROJECT` CMake option to control build and
2494*5c90c05cSAndroid Build Coastguard Worker  install targets when {fmt} is included via `add_subdirectory`
2495*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2098,
2496*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2100).
2497*5c90c05cSAndroid Build Coastguard Worker  Thanks @randomizedthinking.
2498*5c90c05cSAndroid Build Coastguard Worker
2499*5c90c05cSAndroid Build Coastguard Worker- Improved build configuration
2500*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/2026,
2501*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2122).
2502*5c90c05cSAndroid Build Coastguard Worker  Thanks @luncliff and @ibaned.
2503*5c90c05cSAndroid Build Coastguard Worker
2504*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
2505*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1947,
2506*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1959,
2507*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1963,
2508*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1965,
2509*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1966,
2510*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1974,
2511*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1975,
2512*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1990,
2513*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2000,
2514*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2001,
2515*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2002,
2516*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2004,
2517*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2006,
2518*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2009,
2519*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2010,
2520*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2038,
2521*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2039,
2522*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2047,
2523*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2053,
2524*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2059,
2525*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2065,
2526*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2067,
2527*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2068,
2528*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2073,
2529*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2103,
2530*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2105,
2531*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2106,
2532*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2107,
2533*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2116,
2534*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2117,
2535*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2118,
2536*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2119,
2537*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2127,
2538*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2128,
2539*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2140,
2540*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2142,
2541*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2143,
2542*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2144,
2543*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2147,
2544*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2148,
2545*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2149,
2546*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2152,
2547*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2160,
2548*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2170,
2549*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2175,
2550*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2176,
2551*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2177,
2552*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2178,
2553*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2179,
2554*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2180,
2555*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2181,
2556*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2183,
2557*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2184,
2558*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2185,
2559*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2186,
2560*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2187,
2561*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2190,
2562*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2192,
2563*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2194,
2564*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2205,
2565*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2210,
2566*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2211,
2567*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2215,
2568*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2216,
2569*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2218,
2570*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2220,
2571*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2228,
2572*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2229,
2573*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2230,
2574*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2233,
2575*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2239,
2576*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2248,
2577*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2252,
2578*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2253,
2579*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2255,
2580*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2261,
2581*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2278,
2582*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2284,
2583*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2287,
2584*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2289,
2585*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2290,
2586*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2293,
2587*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2295,
2588*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2296,
2589*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2297,
2590*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2311,
2591*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2313,
2592*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2315,
2593*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2320,
2594*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2321,
2595*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2323,
2596*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2328,
2597*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2329,
2598*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2333,
2599*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2338,
2600*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2341).
2601*5c90c05cSAndroid Build Coastguard Worker  Thanks @darklukee, @fagg, @killerbot242, @jgopel, @yeswalrus, @Finkman,
2602*5c90c05cSAndroid Build Coastguard Worker  @HazardyKnusperkeks, @dkavolis, @concatime, @chronoxor, @summivox, @yNeo,
2603*5c90c05cSAndroid Build Coastguard Worker  @Apache-HB, @alexezeder, @toojays, @Brainy0207, @vadz, @imsherlock, @phprus,
2604*5c90c05cSAndroid Build Coastguard Worker  @white238, @yafshar, @BillyDonahue, @jstaahl, @denchat, @DanielaE,
2605*5c90c05cSAndroid Build Coastguard Worker  @ilyakurdyukov, @ilmai, @JessyDL, @sergiud, @mwinterb, @sven-herrmann,
2606*5c90c05cSAndroid Build Coastguard Worker  @jmelas, @twoixter, @crbrz and @upsj.
2607*5c90c05cSAndroid Build Coastguard Worker
2608*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
2609*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1986,
2610*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2051,
2611*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2057,
2612*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2081,
2613*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2084,
2614*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2312).
2615*5c90c05cSAndroid Build Coastguard Worker  Thanks @imba-tjd, @0x416c69 and @mordante.
2616*5c90c05cSAndroid Build Coastguard Worker
2617*5c90c05cSAndroid Build Coastguard Worker- Continuous integration and test improvements
2618*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1969,
2619*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1991,
2620*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2020,
2621*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2110,
2622*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2114,
2623*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2196,
2624*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2217,
2625*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2247,
2626*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2256,
2627*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2336,
2628*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/2346).
2629*5c90c05cSAndroid Build Coastguard Worker  Thanks @jgopel, @alexezeder and @DanielaE.
2630*5c90c05cSAndroid Build Coastguard Worker
2631*5c90c05cSAndroid Build Coastguard WorkerThe change log for versions 0.8.0 - 7.1.3 is available [here](
2632*5c90c05cSAndroid Build Coastguard Workerdoc/ChangeLog-old.md).
2633