xref: /aosp_15_r20/external/fmtlib/doc/ChangeLog-old.md (revision 5c90c05cd622c0a81b57953a4d343e0e489f2e08)
1*5c90c05cSAndroid Build Coastguard Worker# 7.1.3 - 2020-11-24
2*5c90c05cSAndroid Build Coastguard Worker
3*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of buffer boundaries in `format_to_n`
4*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1996,
5*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/2029).
6*5c90c05cSAndroid Build Coastguard Worker- Fixed linkage errors when linking with a shared library
7*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2011).
8*5c90c05cSAndroid Build Coastguard Worker- Reintroduced ostream support to range formatters
9*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2014).
10*5c90c05cSAndroid Build Coastguard Worker- Worked around an issue with mixing std versions in gcc
11*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/2017).
12*5c90c05cSAndroid Build Coastguard Worker
13*5c90c05cSAndroid Build Coastguard Worker# 7.1.2 - 2020-11-04
14*5c90c05cSAndroid Build Coastguard Worker
15*5c90c05cSAndroid Build Coastguard Worker- Fixed floating point formatting with large precision
16*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1976).
17*5c90c05cSAndroid Build Coastguard Worker
18*5c90c05cSAndroid Build Coastguard Worker# 7.1.1 - 2020-11-01
19*5c90c05cSAndroid Build Coastguard Worker
20*5c90c05cSAndroid Build Coastguard Worker- Fixed ABI compatibility with 7.0.x
21*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1961).
22*5c90c05cSAndroid Build Coastguard Worker- Added the `FMT_ARM_ABI_COMPATIBILITY` macro to work around ABI
23*5c90c05cSAndroid Build Coastguard Worker  incompatibility between GCC and Clang on ARM
24*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1919).
25*5c90c05cSAndroid Build Coastguard Worker- Worked around a SFINAE bug in GCC 8
26*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1957).
27*5c90c05cSAndroid Build Coastguard Worker- Fixed linkage errors when building with GCC\'s LTO
28*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1955).
29*5c90c05cSAndroid Build Coastguard Worker- Fixed a compilation error when building without `__builtin_clz` or
30*5c90c05cSAndroid Build Coastguard Worker  equivalent (https://github.com/fmtlib/fmt/pull/1968).
31*5c90c05cSAndroid Build Coastguard Worker  Thanks @tohammer.
32*5c90c05cSAndroid Build Coastguard Worker- Fixed a sign conversion warning
33*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1964). Thanks @OptoCloud.
34*5c90c05cSAndroid Build Coastguard Worker
35*5c90c05cSAndroid Build Coastguard Worker# 7.1.0 - 2020-10-25
36*5c90c05cSAndroid Build Coastguard Worker
37*5c90c05cSAndroid Build Coastguard Worker- Switched from
38*5c90c05cSAndroid Build Coastguard Worker  [Grisu3](https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf)
39*5c90c05cSAndroid Build Coastguard Worker  to [Dragonbox](https://github.com/jk-jeon/dragonbox) for the default
40*5c90c05cSAndroid Build Coastguard Worker  floating-point formatting which gives the shortest decimal
41*5c90c05cSAndroid Build Coastguard Worker  representation with round-trip guarantee and correct rounding
42*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1882,
43*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1887,
44*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1894). This makes {fmt}
45*5c90c05cSAndroid Build Coastguard Worker  up to 20-30x faster than common implementations of
46*5c90c05cSAndroid Build Coastguard Worker  `std::ostringstream` and `sprintf` on
47*5c90c05cSAndroid Build Coastguard Worker  [dtoa-benchmark](https://github.com/fmtlib/dtoa-benchmark) and
48*5c90c05cSAndroid Build Coastguard Worker  faster than double-conversion and Ryū:
49*5c90c05cSAndroid Build Coastguard Worker
50*5c90c05cSAndroid Build Coastguard Worker  ![](https://user-images.githubusercontent.com/576385/95684665-11719600-0ba8-11eb-8e5b-972ff4e49428.png)
51*5c90c05cSAndroid Build Coastguard Worker
52*5c90c05cSAndroid Build Coastguard Worker  It is possible to get even better performance at the cost of larger
53*5c90c05cSAndroid Build Coastguard Worker  binary size by compiling with the `FMT_USE_FULL_CACHE_DRAGONBOX`
54*5c90c05cSAndroid Build Coastguard Worker  macro set to 1.
55*5c90c05cSAndroid Build Coastguard Worker
56*5c90c05cSAndroid Build Coastguard Worker  Thanks @jk-jeon.
57*5c90c05cSAndroid Build Coastguard Worker
58*5c90c05cSAndroid Build Coastguard Worker- Added an experimental unsynchronized file output API which, together
59*5c90c05cSAndroid Build Coastguard Worker  with [format string
60*5c90c05cSAndroid Build Coastguard Worker  compilation](https://fmt.dev/latest/api.html#compile-api), can give
61*5c90c05cSAndroid Build Coastguard Worker  [5-9 times speed up compared to
62*5c90c05cSAndroid Build Coastguard Worker  fprintf](https://www.zverovich.net/2020/08/04/optimal-file-buffer-size.html)
63*5c90c05cSAndroid Build Coastguard Worker  on common platforms ([godbolt](https://godbolt.org/z/nsTcG8)):
64*5c90c05cSAndroid Build Coastguard Worker
65*5c90c05cSAndroid Build Coastguard Worker  ```c++
66*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/os.h>
67*5c90c05cSAndroid Build Coastguard Worker
68*5c90c05cSAndroid Build Coastguard Worker  int main() {
69*5c90c05cSAndroid Build Coastguard Worker    auto f = fmt::output_file("guide");
70*5c90c05cSAndroid Build Coastguard Worker    f.print("The answer is {}.", 42);
71*5c90c05cSAndroid Build Coastguard Worker  }
72*5c90c05cSAndroid Build Coastguard Worker  ```
73*5c90c05cSAndroid Build Coastguard Worker
74*5c90c05cSAndroid Build Coastguard Worker- Added a formatter for `std::chrono::time_point<system_clock>`
75*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1819,
76*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1837). For example
77*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/c4M6fh)):
78*5c90c05cSAndroid Build Coastguard Worker
79*5c90c05cSAndroid Build Coastguard Worker  ```c++
80*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
81*5c90c05cSAndroid Build Coastguard Worker
82*5c90c05cSAndroid Build Coastguard Worker  int main() {
83*5c90c05cSAndroid Build Coastguard Worker    auto now = std::chrono::system_clock::now();
84*5c90c05cSAndroid Build Coastguard Worker    fmt::print("The time is {:%H:%M:%S}.\n", now);
85*5c90c05cSAndroid Build Coastguard Worker  }
86*5c90c05cSAndroid Build Coastguard Worker  ```
87*5c90c05cSAndroid Build Coastguard Worker
88*5c90c05cSAndroid Build Coastguard Worker  Thanks @adamburgess.
89*5c90c05cSAndroid Build Coastguard Worker
90*5c90c05cSAndroid Build Coastguard Worker- Added support for ranges with non-const `begin`/`end` to `fmt::join`
91*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1784,
92*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1786). For example
93*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/jP63Tv)):
94*5c90c05cSAndroid Build Coastguard Worker
95*5c90c05cSAndroid Build Coastguard Worker  ```c++
96*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ranges.h>
97*5c90c05cSAndroid Build Coastguard Worker  #include <range/v3/view/filter.hpp>
98*5c90c05cSAndroid Build Coastguard Worker
99*5c90c05cSAndroid Build Coastguard Worker  int main() {
100*5c90c05cSAndroid Build Coastguard Worker    using std::literals::string_literals::operator""s;
101*5c90c05cSAndroid Build Coastguard Worker    auto strs = std::array{"a"s, "bb"s, "ccc"s};
102*5c90c05cSAndroid Build Coastguard Worker    auto range = strs | ranges::views::filter(
103*5c90c05cSAndroid Build Coastguard Worker      [] (const std::string &x) { return x.size() != 2; }
104*5c90c05cSAndroid Build Coastguard Worker    );
105*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}\n", fmt::join(range, ""));
106*5c90c05cSAndroid Build Coastguard Worker  }
107*5c90c05cSAndroid Build Coastguard Worker  ```
108*5c90c05cSAndroid Build Coastguard Worker
109*5c90c05cSAndroid Build Coastguard Worker  prints \"accc\".
110*5c90c05cSAndroid Build Coastguard Worker
111*5c90c05cSAndroid Build Coastguard Worker  Thanks @tonyelewis.
112*5c90c05cSAndroid Build Coastguard Worker
113*5c90c05cSAndroid Build Coastguard Worker- Added a `memory_buffer::append` overload that takes a range
114*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1806). Thanks @BRevzin.
115*5c90c05cSAndroid Build Coastguard Worker
116*5c90c05cSAndroid Build Coastguard Worker- Improved handling of single code units in `FMT_COMPILE`. For
117*5c90c05cSAndroid Build Coastguard Worker  example:
118*5c90c05cSAndroid Build Coastguard Worker
119*5c90c05cSAndroid Build Coastguard Worker  ```c++
120*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/compile.h>
121*5c90c05cSAndroid Build Coastguard Worker
122*5c90c05cSAndroid Build Coastguard Worker  char* f(char* buf) {
123*5c90c05cSAndroid Build Coastguard Worker    return fmt::format_to(buf, FMT_COMPILE("x{}"), 42);
124*5c90c05cSAndroid Build Coastguard Worker  }
125*5c90c05cSAndroid Build Coastguard Worker  ```
126*5c90c05cSAndroid Build Coastguard Worker
127*5c90c05cSAndroid Build Coastguard Worker  compiles to just ([godbolt](https://godbolt.org/z/5vncz3)):
128*5c90c05cSAndroid Build Coastguard Worker
129*5c90c05cSAndroid Build Coastguard Worker  ```asm
130*5c90c05cSAndroid Build Coastguard Worker  _Z1fPc:
131*5c90c05cSAndroid Build Coastguard Worker    movb $120, (%rdi)
132*5c90c05cSAndroid Build Coastguard Worker    xorl %edx, %edx
133*5c90c05cSAndroid Build Coastguard Worker    cmpl $42, _ZN3fmt2v76detail10basic_dataIvE23zero_or_powers_of_10_32E+8(%rip)
134*5c90c05cSAndroid Build Coastguard Worker    movl $3, %eax
135*5c90c05cSAndroid Build Coastguard Worker    seta %dl
136*5c90c05cSAndroid Build Coastguard Worker    subl %edx, %eax
137*5c90c05cSAndroid Build Coastguard Worker    movzwl _ZN3fmt2v76detail10basic_dataIvE6digitsE+84(%rip), %edx
138*5c90c05cSAndroid Build Coastguard Worker    cltq
139*5c90c05cSAndroid Build Coastguard Worker    addq %rdi, %rax
140*5c90c05cSAndroid Build Coastguard Worker    movw %dx, -2(%rax)
141*5c90c05cSAndroid Build Coastguard Worker    ret
142*5c90c05cSAndroid Build Coastguard Worker  ```
143*5c90c05cSAndroid Build Coastguard Worker
144*5c90c05cSAndroid Build Coastguard Worker  Here a single `mov` instruction writes `'x'` (`$120`) to the output
145*5c90c05cSAndroid Build Coastguard Worker  buffer.
146*5c90c05cSAndroid Build Coastguard Worker
147*5c90c05cSAndroid Build Coastguard Worker- Added dynamic width support to format string compilation
148*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1809).
149*5c90c05cSAndroid Build Coastguard Worker
150*5c90c05cSAndroid Build Coastguard Worker- Improved error reporting for unformattable types: now you\'ll get
151*5c90c05cSAndroid Build Coastguard Worker  the type name directly in the error message instead of the note:
152*5c90c05cSAndroid Build Coastguard Worker
153*5c90c05cSAndroid Build Coastguard Worker  ```c++
154*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
155*5c90c05cSAndroid Build Coastguard Worker
156*5c90c05cSAndroid Build Coastguard Worker  struct how_about_no {};
157*5c90c05cSAndroid Build Coastguard Worker
158*5c90c05cSAndroid Build Coastguard Worker  int main() {
159*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}", how_about_no());
160*5c90c05cSAndroid Build Coastguard Worker  }
161*5c90c05cSAndroid Build Coastguard Worker  ```
162*5c90c05cSAndroid Build Coastguard Worker
163*5c90c05cSAndroid Build Coastguard Worker  Error ([godbolt](https://godbolt.org/z/GoxM4e)):
164*5c90c05cSAndroid Build Coastguard Worker
165*5c90c05cSAndroid Build Coastguard Worker  `fmt/core.h:1438:3: error: static_assert failed due to requirement 'fmt::v7::formattable<how_about_no>()' "Cannot format an argument. To make type T formattable provide a formatter<T> specialization: https://fmt.dev/latest/api.html#udt" ...`
166*5c90c05cSAndroid Build Coastguard Worker
167*5c90c05cSAndroid Build Coastguard Worker- Added the
168*5c90c05cSAndroid Build Coastguard Worker  [make_args_checked](https://fmt.dev/7.1.0/api.html#argument-lists)
169*5c90c05cSAndroid Build Coastguard Worker  function template that allows you to write formatting functions with
170*5c90c05cSAndroid Build Coastguard Worker  compile-time format string checks and avoid binary code bloat
171*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/PEf9qr)):
172*5c90c05cSAndroid Build Coastguard Worker
173*5c90c05cSAndroid Build Coastguard Worker  ```c++
174*5c90c05cSAndroid Build Coastguard Worker  void vlog(const char* file, int line, fmt::string_view format,
175*5c90c05cSAndroid Build Coastguard Worker            fmt::format_args args) {
176*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}: {}: ", file, line);
177*5c90c05cSAndroid Build Coastguard Worker    fmt::vprint(format, args);
178*5c90c05cSAndroid Build Coastguard Worker  }
179*5c90c05cSAndroid Build Coastguard Worker
180*5c90c05cSAndroid Build Coastguard Worker  template <typename S, typename... Args>
181*5c90c05cSAndroid Build Coastguard Worker  void log(const char* file, int line, const S& format, Args&&... args) {
182*5c90c05cSAndroid Build Coastguard Worker    vlog(file, line, format,
183*5c90c05cSAndroid Build Coastguard Worker        fmt::make_args_checked<Args...>(format, args...));
184*5c90c05cSAndroid Build Coastguard Worker  }
185*5c90c05cSAndroid Build Coastguard Worker
186*5c90c05cSAndroid Build Coastguard Worker  #define MY_LOG(format, ...) \
187*5c90c05cSAndroid Build Coastguard Worker    log(__FILE__, __LINE__, FMT_STRING(format), __VA_ARGS__)
188*5c90c05cSAndroid Build Coastguard Worker
189*5c90c05cSAndroid Build Coastguard Worker  MY_LOG("invalid squishiness: {}", 42);
190*5c90c05cSAndroid Build Coastguard Worker  ```
191*5c90c05cSAndroid Build Coastguard Worker
192*5c90c05cSAndroid Build Coastguard Worker- Replaced `snprintf` fallback with a faster internal IEEE 754 `float`
193*5c90c05cSAndroid Build Coastguard Worker  and `double` formatter for arbitrary precision. For example
194*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/dPhWvj)):
195*5c90c05cSAndroid Build Coastguard Worker
196*5c90c05cSAndroid Build Coastguard Worker  ```c++
197*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
198*5c90c05cSAndroid Build Coastguard Worker
199*5c90c05cSAndroid Build Coastguard Worker  int main() {
200*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:.500}\n", 4.9406564584124654E-324);
201*5c90c05cSAndroid Build Coastguard Worker  }
202*5c90c05cSAndroid Build Coastguard Worker  ```
203*5c90c05cSAndroid Build Coastguard Worker
204*5c90c05cSAndroid Build Coastguard Worker  prints
205*5c90c05cSAndroid Build Coastguard Worker
206*5c90c05cSAndroid Build Coastguard Worker  `4.9406564584124654417656879286822137236505980261432476442558568250067550727020875186529983636163599237979656469544571773092665671035593979639877479601078187812630071319031140452784581716784898210368871863605699873072305000638740915356498438731247339727316961514003171538539807412623856559117102665855668676818703956031062493194527159149245532930545654440112748012970999954193198940908041656332452475714786901472678015935523861155013480352649347201937902681071074917033322268447533357208324319360923829e-324`.
207*5c90c05cSAndroid Build Coastguard Worker
208*5c90c05cSAndroid Build Coastguard Worker- Made `format_to_n` and `formatted_size` part of the [core
209*5c90c05cSAndroid Build Coastguard Worker  API](https://fmt.dev/latest/api.html#core-api)
210*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/sPjY1K)):
211*5c90c05cSAndroid Build Coastguard Worker
212*5c90c05cSAndroid Build Coastguard Worker  ```c++
213*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
214*5c90c05cSAndroid Build Coastguard Worker
215*5c90c05cSAndroid Build Coastguard Worker  int main() {
216*5c90c05cSAndroid Build Coastguard Worker    char buffer[10];
217*5c90c05cSAndroid Build Coastguard Worker    auto result = fmt::format_to_n(buffer, sizeof(buffer), "{}", 42);
218*5c90c05cSAndroid Build Coastguard Worker  }
219*5c90c05cSAndroid Build Coastguard Worker  ```
220*5c90c05cSAndroid Build Coastguard Worker
221*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::format_to_n` overload with format string compilation
222*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1764,
223*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1767,
224*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1869). For example
225*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/93h86q)):
226*5c90c05cSAndroid Build Coastguard Worker
227*5c90c05cSAndroid Build Coastguard Worker  ```c++
228*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/compile.h>
229*5c90c05cSAndroid Build Coastguard Worker
230*5c90c05cSAndroid Build Coastguard Worker  int main() {
231*5c90c05cSAndroid Build Coastguard Worker    char buffer[8];
232*5c90c05cSAndroid Build Coastguard Worker    fmt::format_to_n(buffer, sizeof(buffer), FMT_COMPILE("{}"), 42);
233*5c90c05cSAndroid Build Coastguard Worker  }
234*5c90c05cSAndroid Build Coastguard Worker  ```
235*5c90c05cSAndroid Build Coastguard Worker
236*5c90c05cSAndroid Build Coastguard Worker  Thanks @Kurkin and @alexezeder.
237*5c90c05cSAndroid Build Coastguard Worker
238*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::format_to` overload that take `text_style`
239*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1593,
240*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1842,
241*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1843). For example
242*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/z/91153r)):
243*5c90c05cSAndroid Build Coastguard Worker
244*5c90c05cSAndroid Build Coastguard Worker  ```c++
245*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/color.h>
246*5c90c05cSAndroid Build Coastguard Worker
247*5c90c05cSAndroid Build Coastguard Worker  int main() {
248*5c90c05cSAndroid Build Coastguard Worker    std::string out;
249*5c90c05cSAndroid Build Coastguard Worker    fmt::format_to(std::back_inserter(out),
250*5c90c05cSAndroid Build Coastguard Worker                   fmt::emphasis::bold | fg(fmt::color::red),
251*5c90c05cSAndroid Build Coastguard Worker                   "The answer is {}.", 42);
252*5c90c05cSAndroid Build Coastguard Worker  }
253*5c90c05cSAndroid Build Coastguard Worker  ```
254*5c90c05cSAndroid Build Coastguard Worker
255*5c90c05cSAndroid Build Coastguard Worker  Thanks @Naios.
256*5c90c05cSAndroid Build Coastguard Worker
257*5c90c05cSAndroid Build Coastguard Worker- Made the `'#'` specifier emit trailing zeros in addition to the
258*5c90c05cSAndroid Build Coastguard Worker  decimal point (https://github.com/fmtlib/fmt/issues/1797).
259*5c90c05cSAndroid Build Coastguard Worker  For example ([godbolt](https://godbolt.org/z/bhdcW9)):
260*5c90c05cSAndroid Build Coastguard Worker
261*5c90c05cSAndroid Build Coastguard Worker  ```c++
262*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
263*5c90c05cSAndroid Build Coastguard Worker
264*5c90c05cSAndroid Build Coastguard Worker  int main() {
265*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{:#.2g}", 0.5);
266*5c90c05cSAndroid Build Coastguard Worker  }
267*5c90c05cSAndroid Build Coastguard Worker  ```
268*5c90c05cSAndroid Build Coastguard Worker
269*5c90c05cSAndroid Build Coastguard Worker  prints `0.50`.
270*5c90c05cSAndroid Build Coastguard Worker
271*5c90c05cSAndroid Build Coastguard Worker- Changed the default floating point format to not include `.0` for
272*5c90c05cSAndroid Build Coastguard Worker  consistency with `std::format` and `std::to_chars`
273*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1893,
274*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1943). It is possible
275*5c90c05cSAndroid Build Coastguard Worker  to get the decimal point and trailing zero with the `#` specifier.
276*5c90c05cSAndroid Build Coastguard Worker
277*5c90c05cSAndroid Build Coastguard Worker- Fixed an issue with floating-point formatting that could result in
278*5c90c05cSAndroid Build Coastguard Worker  addition of a non-significant trailing zero in rare cases e.g.
279*5c90c05cSAndroid Build Coastguard Worker  `1.00e-34` instead of `1.0e-34`
280*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1873,
281*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1917).
282*5c90c05cSAndroid Build Coastguard Worker
283*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::to_string` fallback on `ostream` insertion operator if
284*5c90c05cSAndroid Build Coastguard Worker  the `formatter` specialization is not provided
285*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1815,
286*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1829). Thanks @alexezeder.
287*5c90c05cSAndroid Build Coastguard Worker
288*5c90c05cSAndroid Build Coastguard Worker- Added support for the append mode to the experimental file API and
289*5c90c05cSAndroid Build Coastguard Worker  improved `fcntl.h` detection.
290*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1847,
291*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1848). Thanks @t-wiser.
292*5c90c05cSAndroid Build Coastguard Worker
293*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of types that have both an implicit conversion
294*5c90c05cSAndroid Build Coastguard Worker  operator and an overloaded `ostream` insertion operator
295*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1766).
296*5c90c05cSAndroid Build Coastguard Worker
297*5c90c05cSAndroid Build Coastguard Worker- Fixed a slicing issue in an internal iterator type
298*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1822). Thanks @BRevzin.
299*5c90c05cSAndroid Build Coastguard Worker
300*5c90c05cSAndroid Build Coastguard Worker- Fixed an issue in locale-specific integer formatting
301*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1927).
302*5c90c05cSAndroid Build Coastguard Worker
303*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of exotic code unit types
304*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1870,
305*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1932).
306*5c90c05cSAndroid Build Coastguard Worker
307*5c90c05cSAndroid Build Coastguard Worker- Improved `FMT_ALWAYS_INLINE`
308*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1878). Thanks @jk-jeon.
309*5c90c05cSAndroid Build Coastguard Worker
310*5c90c05cSAndroid Build Coastguard Worker- Removed dependency on `windows.h`
311*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1900). Thanks @bernd5.
312*5c90c05cSAndroid Build Coastguard Worker
313*5c90c05cSAndroid Build Coastguard Worker- Optimized counting of decimal digits on MSVC
314*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1890). Thanks @mwinterb.
315*5c90c05cSAndroid Build Coastguard Worker
316*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
317*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1772,
318*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1775,
319*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1792,
320*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1838,
321*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1888,
322*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1918,
323*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1939).
324*5c90c05cSAndroid Build Coastguard Worker  Thanks @leolchat, @pepsiman, @Klaim, @ravijanjam, @francesco-st and @udnaan.
325*5c90c05cSAndroid Build Coastguard Worker
326*5c90c05cSAndroid Build Coastguard Worker- Added the `FMT_REDUCE_INT_INSTANTIATIONS` CMake option that reduces
327*5c90c05cSAndroid Build Coastguard Worker  the binary code size at the cost of some integer formatting
328*5c90c05cSAndroid Build Coastguard Worker  performance. This can be useful for extremely memory-constrained
329*5c90c05cSAndroid Build Coastguard Worker  embedded systems
330*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1778,
331*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1781). Thanks @kammce.
332*5c90c05cSAndroid Build Coastguard Worker
333*5c90c05cSAndroid Build Coastguard Worker- Added the `FMT_USE_INLINE_NAMESPACES` macro to control usage of
334*5c90c05cSAndroid Build Coastguard Worker  inline namespaces
335*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1945). Thanks @darklukee.
336*5c90c05cSAndroid Build Coastguard Worker
337*5c90c05cSAndroid Build Coastguard Worker- Improved build configuration
338*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1760,
339*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1770,
340*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1779,
341*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1783,
342*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1823).
343*5c90c05cSAndroid Build Coastguard Worker  Thanks @dvetutnev, @xvitaly, @tambry, @medithe and @martinwuehrer.
344*5c90c05cSAndroid Build Coastguard Worker
345*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
346*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1790,
347*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1802,
348*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1808,
349*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1810,
350*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1811,
351*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1812,
352*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1814,
353*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1816,
354*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1817,
355*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1818,
356*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1825,
357*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1836,
358*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1855,
359*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1856,
360*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1860,
361*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1877,
362*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1879,
363*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1880,
364*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1896,
365*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1897,
366*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1898,
367*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1904,
368*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1908,
369*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1911,
370*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1912,
371*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1928,
372*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1929,
373*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1935,
374*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1937,
375*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1942,
376*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1949).
377*5c90c05cSAndroid Build Coastguard Worker  Thanks @TheQwertiest, @medithe, @martinwuehrer, @n16h7hunt3r, @Othereum,
378*5c90c05cSAndroid Build Coastguard Worker  @gsjaardema, @AlexanderLanin, @gcerretani, @chronoxor, @noizefloor,
379*5c90c05cSAndroid Build Coastguard Worker  @akohlmey, @jk-jeon, @rimathia, @rglarix, @moiwi, @heckad, @MarcDirven.
380*5c90c05cSAndroid Build Coastguard Worker  @BartSiwek and @darklukee.
381*5c90c05cSAndroid Build Coastguard Worker
382*5c90c05cSAndroid Build Coastguard Worker# 7.0.3 - 2020-08-06
383*5c90c05cSAndroid Build Coastguard Worker
384*5c90c05cSAndroid Build Coastguard Worker- Worked around broken `numeric_limits` for 128-bit integers
385*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1787).
386*5c90c05cSAndroid Build Coastguard Worker- Added error reporting on missing named arguments
387*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1796).
388*5c90c05cSAndroid Build Coastguard Worker- Stopped using 128-bit integers with clang-cl
389*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1800). Thanks @Kingcom.
390*5c90c05cSAndroid Build Coastguard Worker- Fixed issues in locale-specific integer formatting
391*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1782,
392*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1801).
393*5c90c05cSAndroid Build Coastguard Worker
394*5c90c05cSAndroid Build Coastguard Worker# 7.0.2 - 2020-07-29
395*5c90c05cSAndroid Build Coastguard Worker
396*5c90c05cSAndroid Build Coastguard Worker- Worked around broken `numeric_limits` for 128-bit integers
397*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1725).
398*5c90c05cSAndroid Build Coastguard Worker- Fixed compatibility with CMake 3.4
399*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1779).
400*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of digit separators in locale-specific formatting
401*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1782).
402*5c90c05cSAndroid Build Coastguard Worker
403*5c90c05cSAndroid Build Coastguard Worker# 7.0.1 - 2020-07-07
404*5c90c05cSAndroid Build Coastguard Worker
405*5c90c05cSAndroid Build Coastguard Worker- Updated the inline version namespace name.
406*5c90c05cSAndroid Build Coastguard Worker- Worked around a gcc bug in mangling of alias templates
407*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1753).
408*5c90c05cSAndroid Build Coastguard Worker- Fixed a linkage error on Windows
409*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1757). Thanks @Kurkin.
410*5c90c05cSAndroid Build Coastguard Worker- Fixed minor issues with the documentation.
411*5c90c05cSAndroid Build Coastguard Worker
412*5c90c05cSAndroid Build Coastguard Worker# 7.0.0 - 2020-07-05
413*5c90c05cSAndroid Build Coastguard Worker
414*5c90c05cSAndroid Build Coastguard Worker- Reduced the library size. For example, on macOS a stripped test
415*5c90c05cSAndroid Build Coastguard Worker  binary statically linked with {fmt} [shrank from \~368k to less than
416*5c90c05cSAndroid Build Coastguard Worker  100k](http://www.zverovich.net/2020/05/21/reducing-library-size.html).
417*5c90c05cSAndroid Build Coastguard Worker
418*5c90c05cSAndroid Build Coastguard Worker- Added a simpler and more efficient [format string compilation
419*5c90c05cSAndroid Build Coastguard Worker  API](https://fmt.dev/7.0.0/api.html#compile-api):
420*5c90c05cSAndroid Build Coastguard Worker
421*5c90c05cSAndroid Build Coastguard Worker  ```c++
422*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/compile.h>
423*5c90c05cSAndroid Build Coastguard Worker
424*5c90c05cSAndroid Build Coastguard Worker  // Converts 42 into std::string using the most efficient method and no
425*5c90c05cSAndroid Build Coastguard Worker  // runtime format string processing.
426*5c90c05cSAndroid Build Coastguard Worker  std::string s = fmt::format(FMT_COMPILE("{}"), 42);
427*5c90c05cSAndroid Build Coastguard Worker  ```
428*5c90c05cSAndroid Build Coastguard Worker
429*5c90c05cSAndroid Build Coastguard Worker  The old `fmt::compile` API is now deprecated.
430*5c90c05cSAndroid Build Coastguard Worker
431*5c90c05cSAndroid Build Coastguard Worker- Optimized integer formatting: `format_to` with format string
432*5c90c05cSAndroid Build Coastguard Worker  compilation and a stack-allocated buffer is now [faster than
433*5c90c05cSAndroid Build Coastguard Worker  to_chars on both libc++ and
434*5c90c05cSAndroid Build Coastguard Worker  libstdc++](http://www.zverovich.net/2020/06/13/fast-int-to-string-revisited.html).
435*5c90c05cSAndroid Build Coastguard Worker
436*5c90c05cSAndroid Build Coastguard Worker- Optimized handling of small format strings. For example,
437*5c90c05cSAndroid Build Coastguard Worker
438*5c90c05cSAndroid Build Coastguard Worker  ```c++
439*5c90c05cSAndroid Build Coastguard Worker  fmt::format("Result: {}: ({},{},{},{})", str1, str2, str3, str4, str5)
440*5c90c05cSAndroid Build Coastguard Worker  ```
441*5c90c05cSAndroid Build Coastguard Worker
442*5c90c05cSAndroid Build Coastguard Worker  is now \~40% faster
443*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1685).
444*5c90c05cSAndroid Build Coastguard Worker
445*5c90c05cSAndroid Build Coastguard Worker- Applied extern templates to improve compile times when using the
446*5c90c05cSAndroid Build Coastguard Worker  core API and `fmt/format.h`
447*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1452). For example,
448*5c90c05cSAndroid Build Coastguard Worker  on macOS with clang the compile time of a test translation unit
449*5c90c05cSAndroid Build Coastguard Worker  dropped from 2.3s to 0.3s with `-O2` and from 0.6s to 0.3s with the
450*5c90c05cSAndroid Build Coastguard Worker  default settings (`-O0`).
451*5c90c05cSAndroid Build Coastguard Worker
452*5c90c05cSAndroid Build Coastguard Worker  Before (`-O2`):
453*5c90c05cSAndroid Build Coastguard Worker
454*5c90c05cSAndroid Build Coastguard Worker      % time c++ -c test.cc -I include -std=c++17 -O2
455*5c90c05cSAndroid Build Coastguard Worker      c++ -c test.cc -I include -std=c++17 -O2  2.22s user 0.08s system 99% cpu 2.311 total
456*5c90c05cSAndroid Build Coastguard Worker
457*5c90c05cSAndroid Build Coastguard Worker  After (`-O2`):
458*5c90c05cSAndroid Build Coastguard Worker
459*5c90c05cSAndroid Build Coastguard Worker      % time c++ -c test.cc -I include -std=c++17 -O2
460*5c90c05cSAndroid Build Coastguard Worker      c++ -c test.cc -I include -std=c++17 -O2  0.26s user 0.04s system 98% cpu 0.303 total
461*5c90c05cSAndroid Build Coastguard Worker
462*5c90c05cSAndroid Build Coastguard Worker  Before (default):
463*5c90c05cSAndroid Build Coastguard Worker
464*5c90c05cSAndroid Build Coastguard Worker      % time c++ -c test.cc -I include -std=c++17
465*5c90c05cSAndroid Build Coastguard Worker      c++ -c test.cc -I include -std=c++17  0.53s user 0.06s system 98% cpu 0.601 total
466*5c90c05cSAndroid Build Coastguard Worker
467*5c90c05cSAndroid Build Coastguard Worker  After (default):
468*5c90c05cSAndroid Build Coastguard Worker
469*5c90c05cSAndroid Build Coastguard Worker      % time c++ -c test.cc -I include -std=c++17
470*5c90c05cSAndroid Build Coastguard Worker      c++ -c test.cc -I include -std=c++17  0.24s user 0.06s system 98% cpu 0.301 total
471*5c90c05cSAndroid Build Coastguard Worker
472*5c90c05cSAndroid Build Coastguard Worker  It is still recommended to use `fmt/core.h` instead of
473*5c90c05cSAndroid Build Coastguard Worker  `fmt/format.h` but the compile time difference is now smaller.
474*5c90c05cSAndroid Build Coastguard Worker  Thanks @alex3d for the suggestion.
475*5c90c05cSAndroid Build Coastguard Worker
476*5c90c05cSAndroid Build Coastguard Worker- Named arguments are now stored on stack (no dynamic memory
477*5c90c05cSAndroid Build Coastguard Worker  allocations) and the compiled code is more compact and efficient.
478*5c90c05cSAndroid Build Coastguard Worker  For example
479*5c90c05cSAndroid Build Coastguard Worker
480*5c90c05cSAndroid Build Coastguard Worker  ```c++
481*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
482*5c90c05cSAndroid Build Coastguard Worker
483*5c90c05cSAndroid Build Coastguard Worker  int main() {
484*5c90c05cSAndroid Build Coastguard Worker    fmt::print("The answer is {answer}\n", fmt::arg("answer", 42));
485*5c90c05cSAndroid Build Coastguard Worker  }
486*5c90c05cSAndroid Build Coastguard Worker  ```
487*5c90c05cSAndroid Build Coastguard Worker
488*5c90c05cSAndroid Build Coastguard Worker  compiles to just ([godbolt](https://godbolt.org/z/NcfEp_))
489*5c90c05cSAndroid Build Coastguard Worker
490*5c90c05cSAndroid Build Coastguard Worker  ```asm
491*5c90c05cSAndroid Build Coastguard Worker  .LC0:
492*5c90c05cSAndroid Build Coastguard Worker          .string "answer"
493*5c90c05cSAndroid Build Coastguard Worker  .LC1:
494*5c90c05cSAndroid Build Coastguard Worker          .string "The answer is {answer}\n"
495*5c90c05cSAndroid Build Coastguard Worker  main:
496*5c90c05cSAndroid Build Coastguard Worker          sub     rsp, 56
497*5c90c05cSAndroid Build Coastguard Worker          mov     edi, OFFSET FLAT:.LC1
498*5c90c05cSAndroid Build Coastguard Worker          mov     esi, 23
499*5c90c05cSAndroid Build Coastguard Worker          movabs  rdx, 4611686018427387905
500*5c90c05cSAndroid Build Coastguard Worker          lea     rax, [rsp+32]
501*5c90c05cSAndroid Build Coastguard Worker          lea     rcx, [rsp+16]
502*5c90c05cSAndroid Build Coastguard Worker          mov     QWORD PTR [rsp+8], 1
503*5c90c05cSAndroid Build Coastguard Worker          mov     QWORD PTR [rsp], rax
504*5c90c05cSAndroid Build Coastguard Worker          mov     DWORD PTR [rsp+16], 42
505*5c90c05cSAndroid Build Coastguard Worker          mov     QWORD PTR [rsp+32], OFFSET FLAT:.LC0
506*5c90c05cSAndroid Build Coastguard Worker          mov     DWORD PTR [rsp+40], 0
507*5c90c05cSAndroid Build Coastguard Worker          call    fmt::v6::vprint(fmt::v6::basic_string_view<char>,
508*5c90c05cSAndroid Build Coastguard Worker                                  fmt::v6::format_args)
509*5c90c05cSAndroid Build Coastguard Worker          xor     eax, eax
510*5c90c05cSAndroid Build Coastguard Worker          add     rsp, 56
511*5c90c05cSAndroid Build Coastguard Worker          ret
512*5c90c05cSAndroid Build Coastguard Worker
513*5c90c05cSAndroid Build Coastguard Worker      .L.str.1:
514*5c90c05cSAndroid Build Coastguard Worker              .asciz  "answer"
515*5c90c05cSAndroid Build Coastguard Worker  ```
516*5c90c05cSAndroid Build Coastguard Worker
517*5c90c05cSAndroid Build Coastguard Worker- Implemented compile-time checks for dynamic width and precision
518*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1614):
519*5c90c05cSAndroid Build Coastguard Worker
520*5c90c05cSAndroid Build Coastguard Worker  ```c++
521*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
522*5c90c05cSAndroid Build Coastguard Worker
523*5c90c05cSAndroid Build Coastguard Worker  int main() {
524*5c90c05cSAndroid Build Coastguard Worker    fmt::print(FMT_STRING("{0:{1}}"), 42);
525*5c90c05cSAndroid Build Coastguard Worker  }
526*5c90c05cSAndroid Build Coastguard Worker  ```
527*5c90c05cSAndroid Build Coastguard Worker
528*5c90c05cSAndroid Build Coastguard Worker  now gives a compilation error because argument 1 doesn\'t exist:
529*5c90c05cSAndroid Build Coastguard Worker
530*5c90c05cSAndroid Build Coastguard Worker      In file included from test.cc:1:
531*5c90c05cSAndroid Build Coastguard Worker      include/fmt/format.h:2726:27: error: constexpr variable 'invalid_format' must be
532*5c90c05cSAndroid Build Coastguard Worker      initialized by a constant expression
533*5c90c05cSAndroid Build Coastguard Worker        FMT_CONSTEXPR_DECL bool invalid_format =
534*5c90c05cSAndroid Build Coastguard Worker                                ^
535*5c90c05cSAndroid Build Coastguard Worker      ...
536*5c90c05cSAndroid Build Coastguard Worker      include/fmt/core.h:569:26: note: in call to
537*5c90c05cSAndroid Build Coastguard Worker      '&checker(s, {}).context_->on_error(&"argument not found"[0])'
538*5c90c05cSAndroid Build Coastguard Worker          if (id >= num_args_) on_error("argument not found");
539*5c90c05cSAndroid Build Coastguard Worker                              ^
540*5c90c05cSAndroid Build Coastguard Worker
541*5c90c05cSAndroid Build Coastguard Worker- Added sentinel support to `fmt::join`
542*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1689)
543*5c90c05cSAndroid Build Coastguard Worker
544*5c90c05cSAndroid Build Coastguard Worker  ```c++
545*5c90c05cSAndroid Build Coastguard Worker  struct zstring_sentinel {};
546*5c90c05cSAndroid Build Coastguard Worker  bool operator==(const char* p, zstring_sentinel) { return *p == '\0'; }
547*5c90c05cSAndroid Build Coastguard Worker  bool operator!=(const char* p, zstring_sentinel) { return *p != '\0'; }
548*5c90c05cSAndroid Build Coastguard Worker
549*5c90c05cSAndroid Build Coastguard Worker  struct zstring {
550*5c90c05cSAndroid Build Coastguard Worker    const char* p;
551*5c90c05cSAndroid Build Coastguard Worker    const char* begin() const { return p; }
552*5c90c05cSAndroid Build Coastguard Worker    zstring_sentinel end() const { return {}; }
553*5c90c05cSAndroid Build Coastguard Worker  };
554*5c90c05cSAndroid Build Coastguard Worker
555*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format("{}", fmt::join(zstring{"hello"}, "_"));
556*5c90c05cSAndroid Build Coastguard Worker  // s == "h_e_l_l_o"
557*5c90c05cSAndroid Build Coastguard Worker  ```
558*5c90c05cSAndroid Build Coastguard Worker
559*5c90c05cSAndroid Build Coastguard Worker  Thanks @BRevzin.
560*5c90c05cSAndroid Build Coastguard Worker
561*5c90c05cSAndroid Build Coastguard Worker- Added support for named arguments, `clear` and `reserve` to
562*5c90c05cSAndroid Build Coastguard Worker  `dynamic_format_arg_store`
563*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1655,
564*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1663,
565*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1674,
566*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1677). Thanks @vsolontsov-ll.
567*5c90c05cSAndroid Build Coastguard Worker
568*5c90c05cSAndroid Build Coastguard Worker- Added support for the `'c'` format specifier to integral types for
569*5c90c05cSAndroid Build Coastguard Worker  compatibility with `std::format`
570*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1652).
571*5c90c05cSAndroid Build Coastguard Worker
572*5c90c05cSAndroid Build Coastguard Worker- Replaced the `'n'` format specifier with `'L'` for compatibility
573*5c90c05cSAndroid Build Coastguard Worker  with `std::format`
574*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1624). The `'n'`
575*5c90c05cSAndroid Build Coastguard Worker  specifier can be enabled via the `FMT_DEPRECATED_N_SPECIFIER` macro.
576*5c90c05cSAndroid Build Coastguard Worker
577*5c90c05cSAndroid Build Coastguard Worker- The `'='` format specifier is now disabled by default for
578*5c90c05cSAndroid Build Coastguard Worker  compatibility with `std::format`. It can be enabled via the
579*5c90c05cSAndroid Build Coastguard Worker  `FMT_DEPRECATED_NUMERIC_ALIGN` macro.
580*5c90c05cSAndroid Build Coastguard Worker
581*5c90c05cSAndroid Build Coastguard Worker- Removed the following deprecated APIs:
582*5c90c05cSAndroid Build Coastguard Worker
583*5c90c05cSAndroid Build Coastguard Worker  -   `FMT_STRING_ALIAS` and `fmt` macros - replaced by `FMT_STRING`
584*5c90c05cSAndroid Build Coastguard Worker  -   `fmt::basic_string_view::char_type` - replaced by
585*5c90c05cSAndroid Build Coastguard Worker      `fmt::basic_string_view::value_type`
586*5c90c05cSAndroid Build Coastguard Worker  -   `convert_to_int`
587*5c90c05cSAndroid Build Coastguard Worker  -   `format_arg_store::types`
588*5c90c05cSAndroid Build Coastguard Worker  -   `*parse_context` - replaced by `*format_parse_context`
589*5c90c05cSAndroid Build Coastguard Worker  -   `FMT_DEPRECATED_INCLUDE_OS`
590*5c90c05cSAndroid Build Coastguard Worker  -   `FMT_DEPRECATED_PERCENT` - incompatible with `std::format`
591*5c90c05cSAndroid Build Coastguard Worker  -   `*writer` - replaced by compiled format API
592*5c90c05cSAndroid Build Coastguard Worker
593*5c90c05cSAndroid Build Coastguard Worker- Renamed the `internal` namespace to `detail`
594*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1538). The former is
595*5c90c05cSAndroid Build Coastguard Worker  still provided as an alias if the `FMT_USE_INTERNAL` macro is
596*5c90c05cSAndroid Build Coastguard Worker  defined.
597*5c90c05cSAndroid Build Coastguard Worker
598*5c90c05cSAndroid Build Coastguard Worker- Improved compatibility between `fmt::printf` with the standard specs
599*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1595,
600*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1682,
601*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1683,
602*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1687,
603*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1699). Thanks @rimathia.
604*5c90c05cSAndroid Build Coastguard Worker
605*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of `operator<<` overloads that use `copyfmt`
606*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1666).
607*5c90c05cSAndroid Build Coastguard Worker
608*5c90c05cSAndroid Build Coastguard Worker- Added the `FMT_OS` CMake option to control inclusion of OS-specific
609*5c90c05cSAndroid Build Coastguard Worker  APIs in the fmt target. This can be useful for embedded platforms
610*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1654,
611*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1656). Thanks @kwesolowski.
612*5c90c05cSAndroid Build Coastguard Worker
613*5c90c05cSAndroid Build Coastguard Worker- Replaced `FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION` with the
614*5c90c05cSAndroid Build Coastguard Worker  `FMT_FUZZ` macro to prevent interfering with fuzzing of projects
615*5c90c05cSAndroid Build Coastguard Worker  using {fmt} (https://github.com/fmtlib/fmt/pull/1650).
616*5c90c05cSAndroid Build Coastguard Worker  Thanks @asraa.
617*5c90c05cSAndroid Build Coastguard Worker
618*5c90c05cSAndroid Build Coastguard Worker- Fixed compatibility with emscripten
619*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1636,
620*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1637). Thanks @ArthurSonzogni.
621*5c90c05cSAndroid Build Coastguard Worker
622*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
623*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/704,
624*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1643,
625*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1660,
626*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1681,
627*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1691,
628*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1706,
629*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1714,
630*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1721,
631*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1739,
632*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1740,
633*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1741,
634*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1751).
635*5c90c05cSAndroid Build Coastguard Worker  Thanks @senior7515, @lsr0, @puetzk, @fpelliccioni, Alexey Kuzmenko, @jelly,
636*5c90c05cSAndroid Build Coastguard Worker  @claremacrae, @jiapengwen, @gsjaardema and @alexey-milovidov.
637*5c90c05cSAndroid Build Coastguard Worker
638*5c90c05cSAndroid Build Coastguard Worker- Implemented various build configuration fixes and improvements
639*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1603,
640*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1657,
641*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1702,
642*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1728).
643*5c90c05cSAndroid Build Coastguard Worker  Thanks @scramsby, @jtojnar, @orivej and @flagarde.
644*5c90c05cSAndroid Build Coastguard Worker
645*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
646*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1616,
647*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1620,
648*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1622,
649*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1625,
650*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1627,
651*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1628,
652*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1629,
653*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1631,
654*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1633,
655*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1649,
656*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1658,
657*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1661,
658*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1667,
659*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1668,
660*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1669,
661*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1692,
662*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1696,
663*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1697,
664*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1707,
665*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1712,
666*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1716,
667*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1722,
668*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1724,
669*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1729,
670*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1738,
671*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1742,
672*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1743,
673*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1744,
674*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1747,
675*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1750).
676*5c90c05cSAndroid Build Coastguard Worker  Thanks @gsjaardema, @gabime, @johnor, @Kurkin, @invexed, @peterbell10,
677*5c90c05cSAndroid Build Coastguard Worker  @daixtrose, @petrutlucian94, @Neargye, @ambitslix, @gabime, @erthink,
678*5c90c05cSAndroid Build Coastguard Worker  @tohammer and @0x8000-0000.
679*5c90c05cSAndroid Build Coastguard Worker
680*5c90c05cSAndroid Build Coastguard Worker# 6.2.1 - 2020-05-09
681*5c90c05cSAndroid Build Coastguard Worker
682*5c90c05cSAndroid Build Coastguard Worker- Fixed ostream support in `sprintf`
683*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1631).
684*5c90c05cSAndroid Build Coastguard Worker- Fixed type detection when using implicit conversion to `string_view`
685*5c90c05cSAndroid Build Coastguard Worker  and ostream `operator<<` inconsistently
686*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1662).
687*5c90c05cSAndroid Build Coastguard Worker
688*5c90c05cSAndroid Build Coastguard Worker# 6.2.0 - 2020-04-05
689*5c90c05cSAndroid Build Coastguard Worker
690*5c90c05cSAndroid Build Coastguard Worker- Improved error reporting when trying to format an object of a
691*5c90c05cSAndroid Build Coastguard Worker  non-formattable type:
692*5c90c05cSAndroid Build Coastguard Worker
693*5c90c05cSAndroid Build Coastguard Worker  ```c++
694*5c90c05cSAndroid Build Coastguard Worker  fmt::format("{}", S());
695*5c90c05cSAndroid Build Coastguard Worker  ```
696*5c90c05cSAndroid Build Coastguard Worker
697*5c90c05cSAndroid Build Coastguard Worker  now gives:
698*5c90c05cSAndroid Build Coastguard Worker
699*5c90c05cSAndroid Build Coastguard Worker      include/fmt/core.h:1015:5: error: static_assert failed due to requirement
700*5c90c05cSAndroid Build Coastguard Worker      'formattable' "Cannot format argument. To make type T formattable provide a
701*5c90c05cSAndroid Build Coastguard Worker      formatter<T> specialization:
702*5c90c05cSAndroid Build Coastguard Worker      https://fmt.dev/latest/api.html#formatting-user-defined-types"
703*5c90c05cSAndroid Build Coastguard Worker          static_assert(
704*5c90c05cSAndroid Build Coastguard Worker          ^
705*5c90c05cSAndroid Build Coastguard Worker      ...
706*5c90c05cSAndroid Build Coastguard Worker      note: in instantiation of function template specialization
707*5c90c05cSAndroid Build Coastguard Worker      'fmt::v6::format<char [3], S, char>' requested here
708*5c90c05cSAndroid Build Coastguard Worker        fmt::format("{}", S());
709*5c90c05cSAndroid Build Coastguard Worker             ^
710*5c90c05cSAndroid Build Coastguard Worker
711*5c90c05cSAndroid Build Coastguard Worker  if `S` is not formattable.
712*5c90c05cSAndroid Build Coastguard Worker
713*5c90c05cSAndroid Build Coastguard Worker- Reduced the library size by \~10%.
714*5c90c05cSAndroid Build Coastguard Worker
715*5c90c05cSAndroid Build Coastguard Worker- Always print decimal point if `#` is specified
716*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1476,
717*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1498):
718*5c90c05cSAndroid Build Coastguard Worker
719*5c90c05cSAndroid Build Coastguard Worker  ```c++
720*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{:#.0f}", 42.0);
721*5c90c05cSAndroid Build Coastguard Worker  ```
722*5c90c05cSAndroid Build Coastguard Worker
723*5c90c05cSAndroid Build Coastguard Worker  now prints `42.`
724*5c90c05cSAndroid Build Coastguard Worker
725*5c90c05cSAndroid Build Coastguard Worker- Implemented the `'L'` specifier for locale-specific numeric
726*5c90c05cSAndroid Build Coastguard Worker  formatting to improve compatibility with `std::format`. The `'n'`
727*5c90c05cSAndroid Build Coastguard Worker  specifier is now deprecated and will be removed in the next major
728*5c90c05cSAndroid Build Coastguard Worker  release.
729*5c90c05cSAndroid Build Coastguard Worker
730*5c90c05cSAndroid Build Coastguard Worker- Moved OS-specific APIs such as `windows_error` from `fmt/format.h`
731*5c90c05cSAndroid Build Coastguard Worker  to `fmt/os.h`. You can define `FMT_DEPRECATED_INCLUDE_OS` to
732*5c90c05cSAndroid Build Coastguard Worker  automatically include `fmt/os.h` from `fmt/format.h` for
733*5c90c05cSAndroid Build Coastguard Worker  compatibility but this will be disabled in the next major release.
734*5c90c05cSAndroid Build Coastguard Worker
735*5c90c05cSAndroid Build Coastguard Worker- Added precision overflow detection in floating-point formatting.
736*5c90c05cSAndroid Build Coastguard Worker
737*5c90c05cSAndroid Build Coastguard Worker- Implemented detection of invalid use of `fmt::arg`.
738*5c90c05cSAndroid Build Coastguard Worker
739*5c90c05cSAndroid Build Coastguard Worker- Used `type_identity` to block unnecessary template argument
740*5c90c05cSAndroid Build Coastguard Worker  deduction. Thanks Tim Song.
741*5c90c05cSAndroid Build Coastguard Worker
742*5c90c05cSAndroid Build Coastguard Worker- Improved UTF-8 handling
743*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1109):
744*5c90c05cSAndroid Build Coastguard Worker
745*5c90c05cSAndroid Build Coastguard Worker  ```c++
746*5c90c05cSAndroid Build Coastguard Worker  fmt::print("┌{0:─^{2}}┐\n"
747*5c90c05cSAndroid Build Coastguard Worker             "│{1: ^{2}}│\n"
748*5c90c05cSAndroid Build Coastguard Worker             "└{0:─^{2}}┘\n", "", "Прывітанне, свет!", 21);
749*5c90c05cSAndroid Build Coastguard Worker  ```
750*5c90c05cSAndroid Build Coastguard Worker
751*5c90c05cSAndroid Build Coastguard Worker  now prints:
752*5c90c05cSAndroid Build Coastguard Worker
753*5c90c05cSAndroid Build Coastguard Worker      ┌─────────────────────┐
754*5c90c05cSAndroid Build Coastguard Worker      │  Прывітанне, свет!  │
755*5c90c05cSAndroid Build Coastguard Worker      └─────────────────────┘
756*5c90c05cSAndroid Build Coastguard Worker
757*5c90c05cSAndroid Build Coastguard Worker  on systems that support Unicode.
758*5c90c05cSAndroid Build Coastguard Worker
759*5c90c05cSAndroid Build Coastguard Worker- Added experimental dynamic argument storage
760*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1170,
761*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1584):
762*5c90c05cSAndroid Build Coastguard Worker
763*5c90c05cSAndroid Build Coastguard Worker  ```c++
764*5c90c05cSAndroid Build Coastguard Worker  fmt::dynamic_format_arg_store<fmt::format_context> store;
765*5c90c05cSAndroid Build Coastguard Worker  store.push_back("answer");
766*5c90c05cSAndroid Build Coastguard Worker  store.push_back(42);
767*5c90c05cSAndroid Build Coastguard Worker  fmt::vprint("The {} is {}.\n", store);
768*5c90c05cSAndroid Build Coastguard Worker  ```
769*5c90c05cSAndroid Build Coastguard Worker
770*5c90c05cSAndroid Build Coastguard Worker  prints:
771*5c90c05cSAndroid Build Coastguard Worker
772*5c90c05cSAndroid Build Coastguard Worker      The answer is 42.
773*5c90c05cSAndroid Build Coastguard Worker
774*5c90c05cSAndroid Build Coastguard Worker  Thanks @vsolontsov-ll.
775*5c90c05cSAndroid Build Coastguard Worker
776*5c90c05cSAndroid Build Coastguard Worker- Made `fmt::join` accept `initializer_list`
777*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1591). Thanks @Rapotkinnik.
778*5c90c05cSAndroid Build Coastguard Worker
779*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of empty tuples
780*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1588).
781*5c90c05cSAndroid Build Coastguard Worker
782*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of output iterators in `format_to_n`
783*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1506).
784*5c90c05cSAndroid Build Coastguard Worker
785*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of `std::chrono::duration` types to wide output
786*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1533). Thanks @zeffy.
787*5c90c05cSAndroid Build Coastguard Worker
788*5c90c05cSAndroid Build Coastguard Worker- Added const `begin` and `end` overload to buffers
789*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1553). Thanks @dominicpoeschko.
790*5c90c05cSAndroid Build Coastguard Worker
791*5c90c05cSAndroid Build Coastguard Worker- Added the ability to disable floating-point formatting via
792*5c90c05cSAndroid Build Coastguard Worker  `FMT_USE_FLOAT`, `FMT_USE_DOUBLE` and `FMT_USE_LONG_DOUBLE` macros
793*5c90c05cSAndroid Build Coastguard Worker  for extremely memory-constrained embedded system
794*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1590). Thanks @albaguirre.
795*5c90c05cSAndroid Build Coastguard Worker
796*5c90c05cSAndroid Build Coastguard Worker- Made `FMT_STRING` work with `constexpr` `string_view`
797*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1589). Thanks @scramsby.
798*5c90c05cSAndroid Build Coastguard Worker
799*5c90c05cSAndroid Build Coastguard Worker- Implemented a minor optimization in the format string parser
800*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1560). Thanks @IkarusDeveloper.
801*5c90c05cSAndroid Build Coastguard Worker
802*5c90c05cSAndroid Build Coastguard Worker- Improved attribute detection
803*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1469,
804*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1475,
805*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1576).
806*5c90c05cSAndroid Build Coastguard Worker  Thanks @federico-busato, @chronoxor and @refnum.
807*5c90c05cSAndroid Build Coastguard Worker
808*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
809*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1481,
810*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1523).
811*5c90c05cSAndroid Build Coastguard Worker  Thanks @JackBoosY and @imba-tjd.
812*5c90c05cSAndroid Build Coastguard Worker
813*5c90c05cSAndroid Build Coastguard Worker- Fixed symbol visibility on Linux when compiling with
814*5c90c05cSAndroid Build Coastguard Worker  `-fvisibility=hidden`
815*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1535). Thanks @milianw.
816*5c90c05cSAndroid Build Coastguard Worker
817*5c90c05cSAndroid Build Coastguard Worker- Implemented various build configuration fixes and improvements
818*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1264,
819*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1460,
820*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1534,
821*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1536,
822*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1545,
823*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1546,
824*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1566,
825*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1582,
826*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1597,
827*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1598).
828*5c90c05cSAndroid Build Coastguard Worker  Thanks @ambitslix, @jwillikers and @stac47.
829*5c90c05cSAndroid Build Coastguard Worker
830*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
831*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1433,
832*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1461,
833*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1470,
834*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1480,
835*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1485,
836*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1492,
837*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1493,
838*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1504,
839*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1505,
840*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1512,
841*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1515,
842*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1516,
843*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1518,
844*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1519,
845*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1520,
846*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1521,
847*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1522,
848*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1524,
849*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1530,
850*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1531,
851*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1532,
852*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1539,
853*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1547,
854*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1548,
855*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1554,
856*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1567,
857*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1568,
858*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1569,
859*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1571,
860*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1573,
861*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1575,
862*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1581,
863*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1583,
864*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1586,
865*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1587,
866*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1594,
867*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1596,
868*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1604,
869*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1606,
870*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1607,
871*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1609).
872*5c90c05cSAndroid Build Coastguard Worker  Thanks @marti4d, @iPherian, @parkertomatoes, @gsjaardema, @chronoxor,
873*5c90c05cSAndroid Build Coastguard Worker  @DanielaE, @torsten48, @tohammer, @lefticus, @ryusakki, @adnsv, @fghzxm,
874*5c90c05cSAndroid Build Coastguard Worker  @refnum, @pramodk, @Spirrwell and @scramsby.
875*5c90c05cSAndroid Build Coastguard Worker
876*5c90c05cSAndroid Build Coastguard Worker# 6.1.2 - 2019-12-11
877*5c90c05cSAndroid Build Coastguard Worker
878*5c90c05cSAndroid Build Coastguard Worker- Fixed ABI compatibility with `libfmt.so.6.0.0`
879*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1471).
880*5c90c05cSAndroid Build Coastguard Worker- Fixed handling types convertible to `std::string_view`
881*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1451). Thanks @denizevrenci.
882*5c90c05cSAndroid Build Coastguard Worker- Made CUDA test an opt-in enabled via the `FMT_CUDA_TEST` CMake
883*5c90c05cSAndroid Build Coastguard Worker  option.
884*5c90c05cSAndroid Build Coastguard Worker- Fixed sign conversion warnings
885*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1440). Thanks @0x8000-0000.
886*5c90c05cSAndroid Build Coastguard Worker
887*5c90c05cSAndroid Build Coastguard Worker# 6.1.1 - 2019-12-04
888*5c90c05cSAndroid Build Coastguard Worker
889*5c90c05cSAndroid Build Coastguard Worker- Fixed shared library build on Windows
890*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1443,
891*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1445,
892*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1446,
893*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1450).
894*5c90c05cSAndroid Build Coastguard Worker  Thanks @egorpugin and @bbolli.
895*5c90c05cSAndroid Build Coastguard Worker- Added a missing decimal point in exponent notation with trailing
896*5c90c05cSAndroid Build Coastguard Worker  zeros.
897*5c90c05cSAndroid Build Coastguard Worker- Removed deprecated `format_arg_store::TYPES`.
898*5c90c05cSAndroid Build Coastguard Worker
899*5c90c05cSAndroid Build Coastguard Worker# 6.1.0 - 2019-12-01
900*5c90c05cSAndroid Build Coastguard Worker
901*5c90c05cSAndroid Build Coastguard Worker- {fmt} now formats IEEE 754 `float` and `double` using the shortest
902*5c90c05cSAndroid Build Coastguard Worker  decimal representation with correct rounding by default:
903*5c90c05cSAndroid Build Coastguard Worker
904*5c90c05cSAndroid Build Coastguard Worker  ```c++
905*5c90c05cSAndroid Build Coastguard Worker  #include <cmath>
906*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
907*5c90c05cSAndroid Build Coastguard Worker
908*5c90c05cSAndroid Build Coastguard Worker  int main() {
909*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}", M_PI);
910*5c90c05cSAndroid Build Coastguard Worker  }
911*5c90c05cSAndroid Build Coastguard Worker  ```
912*5c90c05cSAndroid Build Coastguard Worker
913*5c90c05cSAndroid Build Coastguard Worker  prints `3.141592653589793`.
914*5c90c05cSAndroid Build Coastguard Worker
915*5c90c05cSAndroid Build Coastguard Worker- Made the fast binary to decimal floating-point formatter the
916*5c90c05cSAndroid Build Coastguard Worker  default, simplified it and improved performance. {fmt} is now 15
917*5c90c05cSAndroid Build Coastguard Worker  times faster than libc++\'s `std::ostringstream`, 11 times faster
918*5c90c05cSAndroid Build Coastguard Worker  than `printf` and 10% faster than double-conversion on
919*5c90c05cSAndroid Build Coastguard Worker  [dtoa-benchmark](https://github.com/fmtlib/dtoa-benchmark):
920*5c90c05cSAndroid Build Coastguard Worker
921*5c90c05cSAndroid Build Coastguard Worker  | Function      | Time (ns) | Speedup |
922*5c90c05cSAndroid Build Coastguard Worker  | ------------- | --------: | ------: |
923*5c90c05cSAndroid Build Coastguard Worker  | ostringstream | 1,346.30  | 1.00x   |
924*5c90c05cSAndroid Build Coastguard Worker  | ostrstream    | 1,195.74  | 1.13x   |
925*5c90c05cSAndroid Build Coastguard Worker  | sprintf       | 995.08    | 1.35x   |
926*5c90c05cSAndroid Build Coastguard Worker  | doubleconv    | 99.10     | 13.59x  |
927*5c90c05cSAndroid Build Coastguard Worker  | fmt           | 88.34     | 15.24x  |
928*5c90c05cSAndroid Build Coastguard Worker
929*5c90c05cSAndroid Build Coastguard Worker  ![](https://user-images.githubusercontent.com/576385/69767160-cdaca400-112f-11ea-9fc5-347c9f83caad.png)
930*5c90c05cSAndroid Build Coastguard Worker
931*5c90c05cSAndroid Build Coastguard Worker- {fmt} no longer converts `float` arguments to `double`. In
932*5c90c05cSAndroid Build Coastguard Worker  particular this improves the default (shortest) representation of
933*5c90c05cSAndroid Build Coastguard Worker  floats and makes `fmt::format` consistent with `std::format` specs
934*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1336,
935*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1353,
936*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1360,
937*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1361):
938*5c90c05cSAndroid Build Coastguard Worker
939*5c90c05cSAndroid Build Coastguard Worker  ```c++
940*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{}", 0.1f);
941*5c90c05cSAndroid Build Coastguard Worker  ```
942*5c90c05cSAndroid Build Coastguard Worker
943*5c90c05cSAndroid Build Coastguard Worker  prints `0.1` instead of `0.10000000149011612`.
944*5c90c05cSAndroid Build Coastguard Worker
945*5c90c05cSAndroid Build Coastguard Worker  Thanks @orivej.
946*5c90c05cSAndroid Build Coastguard Worker
947*5c90c05cSAndroid Build Coastguard Worker- Made floating-point formatting output consistent with
948*5c90c05cSAndroid Build Coastguard Worker  `printf`/iostreams
949*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1376,
950*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1417).
951*5c90c05cSAndroid Build Coastguard Worker
952*5c90c05cSAndroid Build Coastguard Worker- Added support for 128-bit integers
953*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1287):
954*5c90c05cSAndroid Build Coastguard Worker
955*5c90c05cSAndroid Build Coastguard Worker  ```c++
956*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{}", std::numeric_limits<__int128_t>::max());
957*5c90c05cSAndroid Build Coastguard Worker  ```
958*5c90c05cSAndroid Build Coastguard Worker
959*5c90c05cSAndroid Build Coastguard Worker  prints `170141183460469231731687303715884105727`.
960*5c90c05cSAndroid Build Coastguard Worker
961*5c90c05cSAndroid Build Coastguard Worker  Thanks @denizevrenci.
962*5c90c05cSAndroid Build Coastguard Worker
963*5c90c05cSAndroid Build Coastguard Worker- The overload of `print` that takes `text_style` is now atomic, i.e.
964*5c90c05cSAndroid Build Coastguard Worker  the output from different threads doesn\'t interleave
965*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1351). Thanks @tankiJong.
966*5c90c05cSAndroid Build Coastguard Worker
967*5c90c05cSAndroid Build Coastguard Worker- Made compile time in the header-only mode \~20% faster by reducing
968*5c90c05cSAndroid Build Coastguard Worker  the number of template instantiations. `wchar_t` overload of
969*5c90c05cSAndroid Build Coastguard Worker  `vprint` was moved from `fmt/core.h` to `fmt/format.h`.
970*5c90c05cSAndroid Build Coastguard Worker
971*5c90c05cSAndroid Build Coastguard Worker- Added an overload of `fmt::join` that works with tuples
972*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1322,
973*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1330):
974*5c90c05cSAndroid Build Coastguard Worker
975*5c90c05cSAndroid Build Coastguard Worker  ```c++
976*5c90c05cSAndroid Build Coastguard Worker  #include <tuple>
977*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ranges.h>
978*5c90c05cSAndroid Build Coastguard Worker
979*5c90c05cSAndroid Build Coastguard Worker  int main() {
980*5c90c05cSAndroid Build Coastguard Worker    std::tuple<char, int, float> t{'a', 1, 2.0f};
981*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}", t);
982*5c90c05cSAndroid Build Coastguard Worker  }
983*5c90c05cSAndroid Build Coastguard Worker  ```
984*5c90c05cSAndroid Build Coastguard Worker
985*5c90c05cSAndroid Build Coastguard Worker  prints `('a', 1, 2.0)`.
986*5c90c05cSAndroid Build Coastguard Worker
987*5c90c05cSAndroid Build Coastguard Worker  Thanks @jeremyong.
988*5c90c05cSAndroid Build Coastguard Worker
989*5c90c05cSAndroid Build Coastguard Worker- Changed formatting of octal zero with prefix from \"00\" to \"0\":
990*5c90c05cSAndroid Build Coastguard Worker
991*5c90c05cSAndroid Build Coastguard Worker  ```c++
992*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{:#o}", 0);
993*5c90c05cSAndroid Build Coastguard Worker  ```
994*5c90c05cSAndroid Build Coastguard Worker
995*5c90c05cSAndroid Build Coastguard Worker  prints `0`.
996*5c90c05cSAndroid Build Coastguard Worker
997*5c90c05cSAndroid Build Coastguard Worker- The locale is now passed to ostream insertion (`<<`) operators
998*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1406):
999*5c90c05cSAndroid Build Coastguard Worker
1000*5c90c05cSAndroid Build Coastguard Worker  ```c++
1001*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/locale.h>
1002*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ostream.h>
1003*5c90c05cSAndroid Build Coastguard Worker
1004*5c90c05cSAndroid Build Coastguard Worker  struct S {
1005*5c90c05cSAndroid Build Coastguard Worker    double value;
1006*5c90c05cSAndroid Build Coastguard Worker  };
1007*5c90c05cSAndroid Build Coastguard Worker
1008*5c90c05cSAndroid Build Coastguard Worker  std::ostream& operator<<(std::ostream& os, S s) {
1009*5c90c05cSAndroid Build Coastguard Worker    return os << s.value;
1010*5c90c05cSAndroid Build Coastguard Worker  }
1011*5c90c05cSAndroid Build Coastguard Worker
1012*5c90c05cSAndroid Build Coastguard Worker  int main() {
1013*5c90c05cSAndroid Build Coastguard Worker    auto s = fmt::format(std::locale("fr_FR.UTF-8"), "{}", S{0.42});
1014*5c90c05cSAndroid Build Coastguard Worker    // s == "0,42"
1015*5c90c05cSAndroid Build Coastguard Worker  }
1016*5c90c05cSAndroid Build Coastguard Worker  ```
1017*5c90c05cSAndroid Build Coastguard Worker
1018*5c90c05cSAndroid Build Coastguard Worker  Thanks @dlaugt.
1019*5c90c05cSAndroid Build Coastguard Worker
1020*5c90c05cSAndroid Build Coastguard Worker- Locale-specific number formatting now uses grouping
1021*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1393,
1022*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1394). Thanks @skrdaniel.
1023*5c90c05cSAndroid Build Coastguard Worker
1024*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of types with deleted implicit rvalue conversion to
1025*5c90c05cSAndroid Build Coastguard Worker  `const char**` (https://github.com/fmtlib/fmt/issues/1421):
1026*5c90c05cSAndroid Build Coastguard Worker
1027*5c90c05cSAndroid Build Coastguard Worker  ```c++
1028*5c90c05cSAndroid Build Coastguard Worker  struct mystring {
1029*5c90c05cSAndroid Build Coastguard Worker    operator const char*() const&;
1030*5c90c05cSAndroid Build Coastguard Worker    operator const char*() &;
1031*5c90c05cSAndroid Build Coastguard Worker    operator const char*() const&& = delete;
1032*5c90c05cSAndroid Build Coastguard Worker    operator const char*() && = delete;
1033*5c90c05cSAndroid Build Coastguard Worker  };
1034*5c90c05cSAndroid Build Coastguard Worker  mystring str;
1035*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{}", str); // now compiles
1036*5c90c05cSAndroid Build Coastguard Worker  ```
1037*5c90c05cSAndroid Build Coastguard Worker
1038*5c90c05cSAndroid Build Coastguard Worker- Enums are now mapped to correct underlying types instead of `int`
1039*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1286). Thanks @agmt.
1040*5c90c05cSAndroid Build Coastguard Worker
1041*5c90c05cSAndroid Build Coastguard Worker- Enum classes are no longer implicitly converted to `int`
1042*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1424).
1043*5c90c05cSAndroid Build Coastguard Worker
1044*5c90c05cSAndroid Build Coastguard Worker- Added `basic_format_parse_context` for consistency with C++20
1045*5c90c05cSAndroid Build Coastguard Worker  `std::format` and deprecated `basic_parse_context`.
1046*5c90c05cSAndroid Build Coastguard Worker
1047*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of UTF-8 in precision
1048*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1389,
1049*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1390). Thanks @tajtiattila.
1050*5c90c05cSAndroid Build Coastguard Worker
1051*5c90c05cSAndroid Build Coastguard Worker- {fmt} can now be installed on Linux, macOS and Windows with
1052*5c90c05cSAndroid Build Coastguard Worker  [Conda](https://docs.conda.io/en/latest/) using its
1053*5c90c05cSAndroid Build Coastguard Worker  [conda-forge](https://conda-forge.org)
1054*5c90c05cSAndroid Build Coastguard Worker  [package](https://github.com/conda-forge/fmt-feedstock)
1055*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1410):
1056*5c90c05cSAndroid Build Coastguard Worker
1057*5c90c05cSAndroid Build Coastguard Worker      conda install -c conda-forge fmt
1058*5c90c05cSAndroid Build Coastguard Worker
1059*5c90c05cSAndroid Build Coastguard Worker  Thanks @tdegeus.
1060*5c90c05cSAndroid Build Coastguard Worker
1061*5c90c05cSAndroid Build Coastguard Worker- Added a CUDA test (https://github.com/fmtlib/fmt/pull/1285,
1062*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1317).
1063*5c90c05cSAndroid Build Coastguard Worker  Thanks @luncliff and @risa2000.
1064*5c90c05cSAndroid Build Coastguard Worker
1065*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
1066*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1276,
1067*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1291,
1068*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1296,
1069*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1315,
1070*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1332,
1071*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1337,
1072*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1395
1073*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1418).
1074*5c90c05cSAndroid Build Coastguard Worker  Thanks @waywardmonkeys, @pauldreik and @jackoalan.
1075*5c90c05cSAndroid Build Coastguard Worker
1076*5c90c05cSAndroid Build Coastguard Worker- Various code improvements
1077*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1358,
1078*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1407).
1079*5c90c05cSAndroid Build Coastguard Worker  Thanks @orivej and @dpacbach.
1080*5c90c05cSAndroid Build Coastguard Worker
1081*5c90c05cSAndroid Build Coastguard Worker- Fixed compile-time format string checks for user-defined types
1082*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1292).
1083*5c90c05cSAndroid Build Coastguard Worker
1084*5c90c05cSAndroid Build Coastguard Worker- Worked around a false positive in `unsigned-integer-overflow` sanitizer
1085*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1377).
1086*5c90c05cSAndroid Build Coastguard Worker
1087*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
1088*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1273,
1089*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1278,
1090*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1280,
1091*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1281,
1092*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1288,
1093*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1290,
1094*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1301,
1095*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1305,
1096*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1306,
1097*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1309,
1098*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1312,
1099*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1313,
1100*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1316,
1101*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1319,
1102*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1320,
1103*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1326,
1104*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1328,
1105*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1344,
1106*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1345,
1107*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1347,
1108*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1349,
1109*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1354,
1110*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1362,
1111*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1366,
1112*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1364,
1113*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1370,
1114*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1371,
1115*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1385,
1116*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1388,
1117*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1397,
1118*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1414,
1119*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1416,
1120*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1422
1121*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1427,
1122*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1431,
1123*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1433).
1124*5c90c05cSAndroid Build Coastguard Worker  Thanks @hhb, @gsjaardema, @gabime, @neheb, @vedranmiletic, @dkavolis,
1125*5c90c05cSAndroid Build Coastguard Worker  @mwinterb, @orivej, @denizevrenci, @leonklingele, @chronoxor, @kent-tri,
1126*5c90c05cSAndroid Build Coastguard Worker  @0x8000-0000 and @marti4d.
1127*5c90c05cSAndroid Build Coastguard Worker
1128*5c90c05cSAndroid Build Coastguard Worker# 6.0.0 - 2019-08-26
1129*5c90c05cSAndroid Build Coastguard Worker
1130*5c90c05cSAndroid Build Coastguard Worker- Switched to the [MIT license](
1131*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/blob/5a4b24613ba16cc689977c3b5bd8274a3ba1dd1f/LICENSE.rst)
1132*5c90c05cSAndroid Build Coastguard Worker  with an optional exception that allows distributing binary code
1133*5c90c05cSAndroid Build Coastguard Worker  without attribution.
1134*5c90c05cSAndroid Build Coastguard Worker
1135*5c90c05cSAndroid Build Coastguard Worker- Floating-point formatting is now locale-independent by default:
1136*5c90c05cSAndroid Build Coastguard Worker
1137*5c90c05cSAndroid Build Coastguard Worker  ```c++
1138*5c90c05cSAndroid Build Coastguard Worker  #include <locale>
1139*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
1140*5c90c05cSAndroid Build Coastguard Worker
1141*5c90c05cSAndroid Build Coastguard Worker  int main() {
1142*5c90c05cSAndroid Build Coastguard Worker    std::locale::global(std::locale("ru_RU.UTF-8"));
1143*5c90c05cSAndroid Build Coastguard Worker    fmt::print("value = {}", 4.2);
1144*5c90c05cSAndroid Build Coastguard Worker  }
1145*5c90c05cSAndroid Build Coastguard Worker  ```
1146*5c90c05cSAndroid Build Coastguard Worker
1147*5c90c05cSAndroid Build Coastguard Worker  prints \"value = 4.2\" regardless of the locale.
1148*5c90c05cSAndroid Build Coastguard Worker
1149*5c90c05cSAndroid Build Coastguard Worker  For locale-specific formatting use the `n` specifier:
1150*5c90c05cSAndroid Build Coastguard Worker
1151*5c90c05cSAndroid Build Coastguard Worker  ```c++
1152*5c90c05cSAndroid Build Coastguard Worker  std::locale::global(std::locale("ru_RU.UTF-8"));
1153*5c90c05cSAndroid Build Coastguard Worker  fmt::print("value = {:n}", 4.2);
1154*5c90c05cSAndroid Build Coastguard Worker  ```
1155*5c90c05cSAndroid Build Coastguard Worker
1156*5c90c05cSAndroid Build Coastguard Worker  prints \"value = 4,2\".
1157*5c90c05cSAndroid Build Coastguard Worker
1158*5c90c05cSAndroid Build Coastguard Worker- Added an experimental Grisu floating-point formatting algorithm
1159*5c90c05cSAndroid Build Coastguard Worker  implementation (disabled by default). To enable it compile with the
1160*5c90c05cSAndroid Build Coastguard Worker  `FMT_USE_GRISU` macro defined to 1:
1161*5c90c05cSAndroid Build Coastguard Worker
1162*5c90c05cSAndroid Build Coastguard Worker  ```c++
1163*5c90c05cSAndroid Build Coastguard Worker  #define FMT_USE_GRISU 1
1164*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
1165*5c90c05cSAndroid Build Coastguard Worker
1166*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format("{}", 4.2); // formats 4.2 using Grisu
1167*5c90c05cSAndroid Build Coastguard Worker  ```
1168*5c90c05cSAndroid Build Coastguard Worker
1169*5c90c05cSAndroid Build Coastguard Worker  With Grisu enabled, {fmt} is 13x faster than `std::ostringstream`
1170*5c90c05cSAndroid Build Coastguard Worker  (libc++) and 10x faster than `sprintf` on
1171*5c90c05cSAndroid Build Coastguard Worker  [dtoa-benchmark](https://github.com/fmtlib/dtoa-benchmark) ([full
1172*5c90c05cSAndroid Build Coastguard Worker  results](https://fmt.dev/unknown_mac64_clang10.0.html)):
1173*5c90c05cSAndroid Build Coastguard Worker
1174*5c90c05cSAndroid Build Coastguard Worker  ![](https://user-images.githubusercontent.com/576385/54883977-9fe8c000-4e28-11e9-8bde-272d122e7c52.jpg)
1175*5c90c05cSAndroid Build Coastguard Worker
1176*5c90c05cSAndroid Build Coastguard Worker- Separated formatting and parsing contexts for consistency with
1177*5c90c05cSAndroid Build Coastguard Worker  [C++20 std::format](http://eel.is/c++draft/format), removing the
1178*5c90c05cSAndroid Build Coastguard Worker  undocumented `basic_format_context::parse_context()` function.
1179*5c90c05cSAndroid Build Coastguard Worker
1180*5c90c05cSAndroid Build Coastguard Worker- Added [oss-fuzz](https://github.com/google/oss-fuzz) support
1181*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1199). Thanks @pauldreik.
1182*5c90c05cSAndroid Build Coastguard Worker
1183*5c90c05cSAndroid Build Coastguard Worker- `formatter` specializations now always take precedence over
1184*5c90c05cSAndroid Build Coastguard Worker  `operator<<` (https://github.com/fmtlib/fmt/issues/952):
1185*5c90c05cSAndroid Build Coastguard Worker
1186*5c90c05cSAndroid Build Coastguard Worker  ```c++
1187*5c90c05cSAndroid Build Coastguard Worker  #include <iostream>
1188*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ostream.h>
1189*5c90c05cSAndroid Build Coastguard Worker
1190*5c90c05cSAndroid Build Coastguard Worker  struct S {};
1191*5c90c05cSAndroid Build Coastguard Worker
1192*5c90c05cSAndroid Build Coastguard Worker  std::ostream& operator<<(std::ostream& os, S) {
1193*5c90c05cSAndroid Build Coastguard Worker    return os << 1;
1194*5c90c05cSAndroid Build Coastguard Worker  }
1195*5c90c05cSAndroid Build Coastguard Worker
1196*5c90c05cSAndroid Build Coastguard Worker  template <>
1197*5c90c05cSAndroid Build Coastguard Worker  struct fmt::formatter<S> : fmt::formatter<int> {
1198*5c90c05cSAndroid Build Coastguard Worker    auto format(S, format_context& ctx) {
1199*5c90c05cSAndroid Build Coastguard Worker      return formatter<int>::format(2, ctx);
1200*5c90c05cSAndroid Build Coastguard Worker    }
1201*5c90c05cSAndroid Build Coastguard Worker  };
1202*5c90c05cSAndroid Build Coastguard Worker
1203*5c90c05cSAndroid Build Coastguard Worker  int main() {
1204*5c90c05cSAndroid Build Coastguard Worker    std::cout << S() << "\n"; // prints 1 using operator<<
1205*5c90c05cSAndroid Build Coastguard Worker    fmt::print("{}\n", S());  // prints 2 using formatter
1206*5c90c05cSAndroid Build Coastguard Worker  }
1207*5c90c05cSAndroid Build Coastguard Worker  ```
1208*5c90c05cSAndroid Build Coastguard Worker
1209*5c90c05cSAndroid Build Coastguard Worker- Introduced the experimental `fmt::compile` function that does format
1210*5c90c05cSAndroid Build Coastguard Worker  string compilation
1211*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/618,
1212*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1169,
1213*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1171):
1214*5c90c05cSAndroid Build Coastguard Worker
1215*5c90c05cSAndroid Build Coastguard Worker  ```c++
1216*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/compile.h>
1217*5c90c05cSAndroid Build Coastguard Worker
1218*5c90c05cSAndroid Build Coastguard Worker  auto f = fmt::compile<int>("{}");
1219*5c90c05cSAndroid Build Coastguard Worker  std::string s = fmt::format(f, 42); // can be called multiple times to
1220*5c90c05cSAndroid Build Coastguard Worker                                      // format different values
1221*5c90c05cSAndroid Build Coastguard Worker  // s == "42"
1222*5c90c05cSAndroid Build Coastguard Worker  ```
1223*5c90c05cSAndroid Build Coastguard Worker
1224*5c90c05cSAndroid Build Coastguard Worker  It moves the cost of parsing a format string outside of the format
1225*5c90c05cSAndroid Build Coastguard Worker  function which can be beneficial when identically formatting many
1226*5c90c05cSAndroid Build Coastguard Worker  objects of the same types. Thanks @stryku.
1227*5c90c05cSAndroid Build Coastguard Worker
1228*5c90c05cSAndroid Build Coastguard Worker- Added experimental `%` format specifier that formats floating-point
1229*5c90c05cSAndroid Build Coastguard Worker  values as percentages
1230*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1060,
1231*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1069,
1232*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1071):
1233*5c90c05cSAndroid Build Coastguard Worker
1234*5c90c05cSAndroid Build Coastguard Worker  ```c++
1235*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format("{:.1%}", 0.42); // s == "42.0%"
1236*5c90c05cSAndroid Build Coastguard Worker  ```
1237*5c90c05cSAndroid Build Coastguard Worker
1238*5c90c05cSAndroid Build Coastguard Worker  Thanks @gawain-bolton.
1239*5c90c05cSAndroid Build Coastguard Worker
1240*5c90c05cSAndroid Build Coastguard Worker- Implemented precision for floating-point durations
1241*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1004,
1242*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1012):
1243*5c90c05cSAndroid Build Coastguard Worker
1244*5c90c05cSAndroid Build Coastguard Worker  ```c++
1245*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format("{:.1}", std::chrono::duration<double>(1.234));
1246*5c90c05cSAndroid Build Coastguard Worker  // s == 1.2s
1247*5c90c05cSAndroid Build Coastguard Worker  ```
1248*5c90c05cSAndroid Build Coastguard Worker
1249*5c90c05cSAndroid Build Coastguard Worker  Thanks @DanielaE.
1250*5c90c05cSAndroid Build Coastguard Worker
1251*5c90c05cSAndroid Build Coastguard Worker- Implemented `chrono` format specifiers `%Q` and `%q` that give the
1252*5c90c05cSAndroid Build Coastguard Worker  value and the unit respectively
1253*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1019):
1254*5c90c05cSAndroid Build Coastguard Worker
1255*5c90c05cSAndroid Build Coastguard Worker  ```c++
1256*5c90c05cSAndroid Build Coastguard Worker  auto value = fmt::format("{:%Q}", 42s); // value == "42"
1257*5c90c05cSAndroid Build Coastguard Worker  auto unit  = fmt::format("{:%q}", 42s); // unit == "s"
1258*5c90c05cSAndroid Build Coastguard Worker  ```
1259*5c90c05cSAndroid Build Coastguard Worker
1260*5c90c05cSAndroid Build Coastguard Worker  Thanks @DanielaE.
1261*5c90c05cSAndroid Build Coastguard Worker
1262*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of dynamic width in chrono formatter:
1263*5c90c05cSAndroid Build Coastguard Worker
1264*5c90c05cSAndroid Build Coastguard Worker  ```c++
1265*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format("{0:{1}%H:%M:%S}", std::chrono::seconds(12345), 12);
1266*5c90c05cSAndroid Build Coastguard Worker  //                        ^ width argument index                     ^ width
1267*5c90c05cSAndroid Build Coastguard Worker  // s == "03:25:45    "
1268*5c90c05cSAndroid Build Coastguard Worker  ```
1269*5c90c05cSAndroid Build Coastguard Worker
1270*5c90c05cSAndroid Build Coastguard Worker  Thanks Howard Hinnant.
1271*5c90c05cSAndroid Build Coastguard Worker
1272*5c90c05cSAndroid Build Coastguard Worker- Removed deprecated `fmt/time.h`. Use `fmt/chrono.h` instead.
1273*5c90c05cSAndroid Build Coastguard Worker
1274*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::format` and `fmt::vformat` overloads that take
1275*5c90c05cSAndroid Build Coastguard Worker  `text_style` (https://github.com/fmtlib/fmt/issues/993,
1276*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/994):
1277*5c90c05cSAndroid Build Coastguard Worker
1278*5c90c05cSAndroid Build Coastguard Worker  ```c++
1279*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/color.h>
1280*5c90c05cSAndroid Build Coastguard Worker
1281*5c90c05cSAndroid Build Coastguard Worker  std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red),
1282*5c90c05cSAndroid Build Coastguard Worker                                    "The answer is {}.", 42);
1283*5c90c05cSAndroid Build Coastguard Worker  ```
1284*5c90c05cSAndroid Build Coastguard Worker
1285*5c90c05cSAndroid Build Coastguard Worker  Thanks @Naios.
1286*5c90c05cSAndroid Build Coastguard Worker
1287*5c90c05cSAndroid Build Coastguard Worker- Removed the deprecated color API (`print_colored`). Use the new API,
1288*5c90c05cSAndroid Build Coastguard Worker  namely `print` overloads that take `text_style` instead.
1289*5c90c05cSAndroid Build Coastguard Worker
1290*5c90c05cSAndroid Build Coastguard Worker- Made `std::unique_ptr` and `std::shared_ptr` formattable as pointers
1291*5c90c05cSAndroid Build Coastguard Worker  via `fmt::ptr` (https://github.com/fmtlib/fmt/pull/1121):
1292*5c90c05cSAndroid Build Coastguard Worker
1293*5c90c05cSAndroid Build Coastguard Worker  ```c++
1294*5c90c05cSAndroid Build Coastguard Worker  std::unique_ptr<int> p = ...;
1295*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{}", fmt::ptr(p)); // prints p as a pointer
1296*5c90c05cSAndroid Build Coastguard Worker  ```
1297*5c90c05cSAndroid Build Coastguard Worker
1298*5c90c05cSAndroid Build Coastguard Worker  Thanks @sighingnow.
1299*5c90c05cSAndroid Build Coastguard Worker
1300*5c90c05cSAndroid Build Coastguard Worker- Made `print` and `vprint` report I/O errors
1301*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1098,
1302*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1099). Thanks @BillyDonahue.
1303*5c90c05cSAndroid Build Coastguard Worker
1304*5c90c05cSAndroid Build Coastguard Worker- Marked deprecated APIs with the `[[deprecated]]` attribute and
1305*5c90c05cSAndroid Build Coastguard Worker  removed internal uses of deprecated APIs
1306*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1022). Thanks @eliaskosunen.
1307*5c90c05cSAndroid Build Coastguard Worker
1308*5c90c05cSAndroid Build Coastguard Worker- Modernized the codebase using more C++11 features and removing
1309*5c90c05cSAndroid Build Coastguard Worker  workarounds. Most importantly, `buffer_context` is now an alias
1310*5c90c05cSAndroid Build Coastguard Worker  template, so use `buffer_context<T>` instead of
1311*5c90c05cSAndroid Build Coastguard Worker  `buffer_context<T>::type`. These features require GCC 4.8 or later.
1312*5c90c05cSAndroid Build Coastguard Worker
1313*5c90c05cSAndroid Build Coastguard Worker- `formatter` specializations now always take precedence over implicit
1314*5c90c05cSAndroid Build Coastguard Worker  conversions to `int` and the undocumented `convert_to_int` trait is
1315*5c90c05cSAndroid Build Coastguard Worker  now deprecated.
1316*5c90c05cSAndroid Build Coastguard Worker
1317*5c90c05cSAndroid Build Coastguard Worker- Moved the undocumented `basic_writer`, `writer`, and `wwriter` types
1318*5c90c05cSAndroid Build Coastguard Worker  to the `internal` namespace.
1319*5c90c05cSAndroid Build Coastguard Worker
1320*5c90c05cSAndroid Build Coastguard Worker- Removed deprecated `basic_format_context::begin()`. Use `out()`
1321*5c90c05cSAndroid Build Coastguard Worker  instead.
1322*5c90c05cSAndroid Build Coastguard Worker
1323*5c90c05cSAndroid Build Coastguard Worker- Disallowed passing the result of `join` as an lvalue to prevent
1324*5c90c05cSAndroid Build Coastguard Worker  misuse.
1325*5c90c05cSAndroid Build Coastguard Worker
1326*5c90c05cSAndroid Build Coastguard Worker- Refactored the undocumented structs that represent parsed format
1327*5c90c05cSAndroid Build Coastguard Worker  specifiers to simplify the API and allow multibyte fill.
1328*5c90c05cSAndroid Build Coastguard Worker
1329*5c90c05cSAndroid Build Coastguard Worker- Moved SFINAE to template parameters to reduce symbol sizes.
1330*5c90c05cSAndroid Build Coastguard Worker
1331*5c90c05cSAndroid Build Coastguard Worker- Switched to `fputws` for writing wide strings so that it\'s no
1332*5c90c05cSAndroid Build Coastguard Worker  longer required to call `_setmode` on Windows
1333*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1229,
1334*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1243). Thanks @jackoalan.
1335*5c90c05cSAndroid Build Coastguard Worker
1336*5c90c05cSAndroid Build Coastguard Worker- Improved literal-based API
1337*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1254). Thanks @sylveon.
1338*5c90c05cSAndroid Build Coastguard Worker
1339*5c90c05cSAndroid Build Coastguard Worker- Added support for exotic platforms without `uintptr_t` such as IBM i
1340*5c90c05cSAndroid Build Coastguard Worker  (AS/400) which has 128-bit pointers and only 64-bit integers
1341*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1059).
1342*5c90c05cSAndroid Build Coastguard Worker
1343*5c90c05cSAndroid Build Coastguard Worker- Added [Sublime Text syntax highlighting config](
1344*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/blob/master/support/C%2B%2B.sublime-syntax)
1345*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1037). Thanks @Kronuz.
1346*5c90c05cSAndroid Build Coastguard Worker
1347*5c90c05cSAndroid Build Coastguard Worker- Added the `FMT_ENFORCE_COMPILE_STRING` macro to enforce the use of
1348*5c90c05cSAndroid Build Coastguard Worker  compile-time format strings
1349*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1231). Thanks @jackoalan.
1350*5c90c05cSAndroid Build Coastguard Worker
1351*5c90c05cSAndroid Build Coastguard Worker- Stopped setting `CMAKE_BUILD_TYPE` if {fmt} is a subproject
1352*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1081).
1353*5c90c05cSAndroid Build Coastguard Worker
1354*5c90c05cSAndroid Build Coastguard Worker- Various build improvements
1355*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1039,
1356*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1078,
1357*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1091,
1358*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1103,
1359*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1177).
1360*5c90c05cSAndroid Build Coastguard Worker  Thanks @luncliff, @jasonszang, @olafhering, @Lecetem and @pauldreik.
1361*5c90c05cSAndroid Build Coastguard Worker
1362*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
1363*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1049,
1364*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1051,
1365*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1083,
1366*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1113,
1367*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1114,
1368*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1146,
1369*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1180,
1370*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1250,
1371*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1252,
1372*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1265).
1373*5c90c05cSAndroid Build Coastguard Worker  Thanks @mikelui, @foonathan, @BillyDonahue, @jwakely, @kaisbe and
1374*5c90c05cSAndroid Build Coastguard Worker  @sdebionne.
1375*5c90c05cSAndroid Build Coastguard Worker
1376*5c90c05cSAndroid Build Coastguard Worker- Fixed ambiguous formatter specialization in `fmt/ranges.h`
1377*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1123).
1378*5c90c05cSAndroid Build Coastguard Worker
1379*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of a non-empty `std::filesystem::path` which is an
1380*5c90c05cSAndroid Build Coastguard Worker  infinitely deep range of its components
1381*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1268).
1382*5c90c05cSAndroid Build Coastguard Worker
1383*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of general output iterators when formatting
1384*5c90c05cSAndroid Build Coastguard Worker  characters (https://github.com/fmtlib/fmt/issues/1056,
1385*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1058). Thanks @abolz.
1386*5c90c05cSAndroid Build Coastguard Worker
1387*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of output iterators in `formatter` specialization for
1388*5c90c05cSAndroid Build Coastguard Worker  ranges (https://github.com/fmtlib/fmt/issues/1064).
1389*5c90c05cSAndroid Build Coastguard Worker
1390*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of exotic character types
1391*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1188).
1392*5c90c05cSAndroid Build Coastguard Worker
1393*5c90c05cSAndroid Build Coastguard Worker- Made chrono formatting work with exceptions disabled
1394*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1062).
1395*5c90c05cSAndroid Build Coastguard Worker
1396*5c90c05cSAndroid Build Coastguard Worker- Fixed DLL visibility issues
1397*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/1134,
1398*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1147). Thanks @denchat.
1399*5c90c05cSAndroid Build Coastguard Worker
1400*5c90c05cSAndroid Build Coastguard Worker- Disabled the use of UDL template extension on GCC 9
1401*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1148).
1402*5c90c05cSAndroid Build Coastguard Worker
1403*5c90c05cSAndroid Build Coastguard Worker- Removed misplaced `format` compile-time checks from `printf`
1404*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1173).
1405*5c90c05cSAndroid Build Coastguard Worker
1406*5c90c05cSAndroid Build Coastguard Worker- Fixed issues in the experimental floating-point formatter
1407*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1072,
1408*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1129,
1409*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1153,
1410*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1155,
1411*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1210,
1412*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1222). Thanks @alabuzhev.
1413*5c90c05cSAndroid Build Coastguard Worker
1414*5c90c05cSAndroid Build Coastguard Worker- Fixed bugs discovered by fuzzing or during fuzzing integration
1415*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1124,
1416*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1127,
1417*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1132,
1418*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1135,
1419*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1136,
1420*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1141,
1421*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1142,
1422*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1178,
1423*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1179,
1424*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1194). Thanks @pauldreik.
1425*5c90c05cSAndroid Build Coastguard Worker
1426*5c90c05cSAndroid Build Coastguard Worker- Fixed building tests on FreeBSD and Hurd
1427*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/1043). Thanks @jackyf.
1428*5c90c05cSAndroid Build Coastguard Worker
1429*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and compilation issues
1430*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/998,
1431*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1006,
1432*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1008,
1433*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1011,
1434*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1025,
1435*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1027,
1436*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1028,
1437*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1029,
1438*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1030,
1439*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1031,
1440*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1054,
1441*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1063,
1442*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1068,
1443*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1074,
1444*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1075,
1445*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1079,
1446*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1086,
1447*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1088,
1448*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1089,
1449*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1094,
1450*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1101,
1451*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1102,
1452*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1105,
1453*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1107,
1454*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1115,
1455*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1117,
1456*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1118,
1457*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1120,
1458*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1123,
1459*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1139,
1460*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1140,
1461*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1143,
1462*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1144,
1463*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1150,
1464*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1151,
1465*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1152,
1466*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1154,
1467*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1156,
1468*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1159,
1469*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1175,
1470*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1181,
1471*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1186,
1472*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1187,
1473*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1191,
1474*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1197,
1475*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1200,
1476*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1203,
1477*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1205,
1478*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1206,
1479*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1213,
1480*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1214,
1481*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1217,
1482*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1228,
1483*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1230,
1484*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1232,
1485*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1235,
1486*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/1236,
1487*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/1240).
1488*5c90c05cSAndroid Build Coastguard Worker  Thanks @DanielaE, @mwinterb, @eliaskosunen, @morinmorin, @ricco19,
1489*5c90c05cSAndroid Build Coastguard Worker  @waywardmonkeys, @chronoxor, @remyabel, @pauldreik, @gsjaardema, @rcane,
1490*5c90c05cSAndroid Build Coastguard Worker  @mocabe, @denchat, @cjdb, @HazardyKnusperkeks, @vedranmiletic, @jackoalan,
1491*5c90c05cSAndroid Build Coastguard Worker  @DaanDeMeyer and @starkmapper.
1492*5c90c05cSAndroid Build Coastguard Worker
1493*5c90c05cSAndroid Build Coastguard Worker# 5.3.0 - 2018-12-28
1494*5c90c05cSAndroid Build Coastguard Worker
1495*5c90c05cSAndroid Build Coastguard Worker- Introduced experimental chrono formatting support:
1496*5c90c05cSAndroid Build Coastguard Worker
1497*5c90c05cSAndroid Build Coastguard Worker  ```c++
1498*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/chrono.h>
1499*5c90c05cSAndroid Build Coastguard Worker
1500*5c90c05cSAndroid Build Coastguard Worker  int main() {
1501*5c90c05cSAndroid Build Coastguard Worker    using namespace std::literals::chrono_literals;
1502*5c90c05cSAndroid Build Coastguard Worker    fmt::print("Default format: {} {}\n", 42s, 100ms);
1503*5c90c05cSAndroid Build Coastguard Worker    fmt::print("strftime-like format: {:%H:%M:%S}\n", 3h + 15min + 30s);
1504*5c90c05cSAndroid Build Coastguard Worker  }
1505*5c90c05cSAndroid Build Coastguard Worker  ```
1506*5c90c05cSAndroid Build Coastguard Worker
1507*5c90c05cSAndroid Build Coastguard Worker  prints:
1508*5c90c05cSAndroid Build Coastguard Worker
1509*5c90c05cSAndroid Build Coastguard Worker      Default format: 42s 100ms
1510*5c90c05cSAndroid Build Coastguard Worker      strftime-like format: 03:15:30
1511*5c90c05cSAndroid Build Coastguard Worker
1512*5c90c05cSAndroid Build Coastguard Worker- Added experimental support for emphasis (bold, italic, underline,
1513*5c90c05cSAndroid Build Coastguard Worker  strikethrough), colored output to a file stream, and improved
1514*5c90c05cSAndroid Build Coastguard Worker  colored formatting API
1515*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/961,
1516*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/967,
1517*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/973):
1518*5c90c05cSAndroid Build Coastguard Worker
1519*5c90c05cSAndroid Build Coastguard Worker  ```c++
1520*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/color.h>
1521*5c90c05cSAndroid Build Coastguard Worker
1522*5c90c05cSAndroid Build Coastguard Worker  int main() {
1523*5c90c05cSAndroid Build Coastguard Worker    fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold,
1524*5c90c05cSAndroid Build Coastguard Worker               "Hello, {}!\n", "world");
1525*5c90c05cSAndroid Build Coastguard Worker    fmt::print(fg(fmt::color::floral_white) | bg(fmt::color::slate_gray) |
1526*5c90c05cSAndroid Build Coastguard Worker               fmt::emphasis::underline, "Olá, {}!\n", "Mundo");
1527*5c90c05cSAndroid Build Coastguard Worker    fmt::print(fg(fmt::color::steel_blue) | fmt::emphasis::italic,
1528*5c90c05cSAndroid Build Coastguard Worker               "你好{}!\n", "世界");
1529*5c90c05cSAndroid Build Coastguard Worker  }
1530*5c90c05cSAndroid Build Coastguard Worker  ```
1531*5c90c05cSAndroid Build Coastguard Worker
1532*5c90c05cSAndroid Build Coastguard Worker  prints the following on modern terminals with RGB color support:
1533*5c90c05cSAndroid Build Coastguard Worker
1534*5c90c05cSAndroid Build Coastguard Worker  ![](https://github.com/fmtlib/fmt/assets/%0A576385/2a93c904-d6fa-4aa6-b453-2618e1c327d7)
1535*5c90c05cSAndroid Build Coastguard Worker
1536*5c90c05cSAndroid Build Coastguard Worker  Thanks @Rakete1111.
1537*5c90c05cSAndroid Build Coastguard Worker
1538*5c90c05cSAndroid Build Coastguard Worker- Added support for 4-bit terminal colors
1539*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/968,
1540*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/974)
1541*5c90c05cSAndroid Build Coastguard Worker
1542*5c90c05cSAndroid Build Coastguard Worker  ```c++
1543*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/color.h>
1544*5c90c05cSAndroid Build Coastguard Worker
1545*5c90c05cSAndroid Build Coastguard Worker  int main() {
1546*5c90c05cSAndroid Build Coastguard Worker    print(fg(fmt::terminal_color::red), "stop\n");
1547*5c90c05cSAndroid Build Coastguard Worker  }
1548*5c90c05cSAndroid Build Coastguard Worker  ```
1549*5c90c05cSAndroid Build Coastguard Worker
1550*5c90c05cSAndroid Build Coastguard Worker  Note that these colors vary by terminal:
1551*5c90c05cSAndroid Build Coastguard Worker
1552*5c90c05cSAndroid Build Coastguard Worker  ![](https://user-images.githubusercontent.com/576385/50405925-dbfc7e00-0770-11e9-9b85-333fab0af9ac.png)
1553*5c90c05cSAndroid Build Coastguard Worker
1554*5c90c05cSAndroid Build Coastguard Worker  Thanks @Rakete1111.
1555*5c90c05cSAndroid Build Coastguard Worker
1556*5c90c05cSAndroid Build Coastguard Worker- Parameterized formatting functions on the type of the format string
1557*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/880,
1558*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/881,
1559*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/883,
1560*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/885,
1561*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/897,
1562*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/920). Any object of
1563*5c90c05cSAndroid Build Coastguard Worker  type `S` that has an overloaded `to_string_view(const S&)` returning
1564*5c90c05cSAndroid Build Coastguard Worker  `fmt::string_view` can be used as a format string:
1565*5c90c05cSAndroid Build Coastguard Worker
1566*5c90c05cSAndroid Build Coastguard Worker  ```c++
1567*5c90c05cSAndroid Build Coastguard Worker  namespace my_ns {
1568*5c90c05cSAndroid Build Coastguard Worker  inline string_view to_string_view(const my_string& s) {
1569*5c90c05cSAndroid Build Coastguard Worker    return {s.data(), s.length()};
1570*5c90c05cSAndroid Build Coastguard Worker  }
1571*5c90c05cSAndroid Build Coastguard Worker  }
1572*5c90c05cSAndroid Build Coastguard Worker
1573*5c90c05cSAndroid Build Coastguard Worker  std::string message = fmt::format(my_string("The answer is {}."), 42);
1574*5c90c05cSAndroid Build Coastguard Worker  ```
1575*5c90c05cSAndroid Build Coastguard Worker
1576*5c90c05cSAndroid Build Coastguard Worker  Thanks @DanielaE.
1577*5c90c05cSAndroid Build Coastguard Worker
1578*5c90c05cSAndroid Build Coastguard Worker- Made `std::string_view` work as a format string
1579*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/898):
1580*5c90c05cSAndroid Build Coastguard Worker
1581*5c90c05cSAndroid Build Coastguard Worker  ```c++
1582*5c90c05cSAndroid Build Coastguard Worker  auto message = fmt::format(std::string_view("The answer is {}."), 42);
1583*5c90c05cSAndroid Build Coastguard Worker  ```
1584*5c90c05cSAndroid Build Coastguard Worker
1585*5c90c05cSAndroid Build Coastguard Worker  Thanks @DanielaE.
1586*5c90c05cSAndroid Build Coastguard Worker
1587*5c90c05cSAndroid Build Coastguard Worker- Added wide string support to compile-time format string checks
1588*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/924):
1589*5c90c05cSAndroid Build Coastguard Worker
1590*5c90c05cSAndroid Build Coastguard Worker  ```c++
1591*5c90c05cSAndroid Build Coastguard Worker  print(fmt(L"{:f}"), 42); // compile-time error: invalid type specifier
1592*5c90c05cSAndroid Build Coastguard Worker  ```
1593*5c90c05cSAndroid Build Coastguard Worker
1594*5c90c05cSAndroid Build Coastguard Worker  Thanks @XZiar.
1595*5c90c05cSAndroid Build Coastguard Worker
1596*5c90c05cSAndroid Build Coastguard Worker- Made colored print functions work with wide strings
1597*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/867):
1598*5c90c05cSAndroid Build Coastguard Worker
1599*5c90c05cSAndroid Build Coastguard Worker  ```c++
1600*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/color.h>
1601*5c90c05cSAndroid Build Coastguard Worker
1602*5c90c05cSAndroid Build Coastguard Worker  int main() {
1603*5c90c05cSAndroid Build Coastguard Worker    print(fg(fmt::color::red), L"{}\n", 42);
1604*5c90c05cSAndroid Build Coastguard Worker  }
1605*5c90c05cSAndroid Build Coastguard Worker  ```
1606*5c90c05cSAndroid Build Coastguard Worker
1607*5c90c05cSAndroid Build Coastguard Worker  Thanks @DanielaE.
1608*5c90c05cSAndroid Build Coastguard Worker
1609*5c90c05cSAndroid Build Coastguard Worker- Introduced experimental Unicode support
1610*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/628,
1611*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/891):
1612*5c90c05cSAndroid Build Coastguard Worker
1613*5c90c05cSAndroid Build Coastguard Worker  ```c++
1614*5c90c05cSAndroid Build Coastguard Worker  using namespace fmt::literals;
1615*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format("{:*^5}"_u, "��"_u); // s == "**��**"_u
1616*5c90c05cSAndroid Build Coastguard Worker  ```
1617*5c90c05cSAndroid Build Coastguard Worker
1618*5c90c05cSAndroid Build Coastguard Worker- Improved locale support:
1619*5c90c05cSAndroid Build Coastguard Worker
1620*5c90c05cSAndroid Build Coastguard Worker  ```c++
1621*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/locale.h>
1622*5c90c05cSAndroid Build Coastguard Worker
1623*5c90c05cSAndroid Build Coastguard Worker  struct numpunct : std::numpunct<char> {
1624*5c90c05cSAndroid Build Coastguard Worker   protected:
1625*5c90c05cSAndroid Build Coastguard Worker    char do_thousands_sep() const override { return '~'; }
1626*5c90c05cSAndroid Build Coastguard Worker  };
1627*5c90c05cSAndroid Build Coastguard Worker
1628*5c90c05cSAndroid Build Coastguard Worker  std::locale loc;
1629*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format(std::locale(loc, new numpunct()), "{:n}", 1234567);
1630*5c90c05cSAndroid Build Coastguard Worker  // s == "1~234~567"
1631*5c90c05cSAndroid Build Coastguard Worker  ```
1632*5c90c05cSAndroid Build Coastguard Worker
1633*5c90c05cSAndroid Build Coastguard Worker- Constrained formatting functions on proper iterator types
1634*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/921). Thanks @DanielaE.
1635*5c90c05cSAndroid Build Coastguard Worker
1636*5c90c05cSAndroid Build Coastguard Worker- Added `make_printf_args` and `make_wprintf_args` functions
1637*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/934). Thanks @tnovotny.
1638*5c90c05cSAndroid Build Coastguard Worker
1639*5c90c05cSAndroid Build Coastguard Worker- Deprecated `fmt::visit`, `parse_context`, and `wparse_context`. Use
1640*5c90c05cSAndroid Build Coastguard Worker  `fmt::visit_format_arg`, `format_parse_context`, and
1641*5c90c05cSAndroid Build Coastguard Worker  `wformat_parse_context` instead.
1642*5c90c05cSAndroid Build Coastguard Worker
1643*5c90c05cSAndroid Build Coastguard Worker- Removed undocumented `basic_fixed_buffer` which has been superseded
1644*5c90c05cSAndroid Build Coastguard Worker  by the iterator-based API
1645*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/873,
1646*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/902). Thanks @superfunc.
1647*5c90c05cSAndroid Build Coastguard Worker
1648*5c90c05cSAndroid Build Coastguard Worker- Disallowed repeated leading zeros in an argument ID:
1649*5c90c05cSAndroid Build Coastguard Worker
1650*5c90c05cSAndroid Build Coastguard Worker  ```c++
1651*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{000}", 42); // error
1652*5c90c05cSAndroid Build Coastguard Worker  ```
1653*5c90c05cSAndroid Build Coastguard Worker
1654*5c90c05cSAndroid Build Coastguard Worker- Reintroduced support for gcc 4.4.
1655*5c90c05cSAndroid Build Coastguard Worker
1656*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation on platforms with exotic `double`
1657*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/878).
1658*5c90c05cSAndroid Build Coastguard Worker
1659*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
1660*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/164,
1661*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/877,
1662*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/901,
1663*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/906,
1664*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/979).
1665*5c90c05cSAndroid Build Coastguard Worker  Thanks @kookjr, @DarkDimius and @HecticSerenity.
1666*5c90c05cSAndroid Build Coastguard Worker
1667*5c90c05cSAndroid Build Coastguard Worker- Added pkgconfig support which makes it easier to consume the library
1668*5c90c05cSAndroid Build Coastguard Worker  from meson and other build systems
1669*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/916). Thanks @colemickens.
1670*5c90c05cSAndroid Build Coastguard Worker
1671*5c90c05cSAndroid Build Coastguard Worker- Various build improvements
1672*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/909,
1673*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/926,
1674*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/937,
1675*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/953,
1676*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/959).
1677*5c90c05cSAndroid Build Coastguard Worker  Thanks @tchaikov, @luncliff, @AndreasSchoenle, @hotwatermorning and @Zefz.
1678*5c90c05cSAndroid Build Coastguard Worker
1679*5c90c05cSAndroid Build Coastguard Worker- Improved `string_view` construction performance
1680*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/914). Thanks @gabime.
1681*5c90c05cSAndroid Build Coastguard Worker
1682*5c90c05cSAndroid Build Coastguard Worker- Fixed non-matching char types
1683*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/895). Thanks @DanielaE.
1684*5c90c05cSAndroid Build Coastguard Worker
1685*5c90c05cSAndroid Build Coastguard Worker- Fixed `format_to_n` with `std::back_insert_iterator`
1686*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/913). Thanks @DanielaE.
1687*5c90c05cSAndroid Build Coastguard Worker
1688*5c90c05cSAndroid Build Coastguard Worker- Fixed locale-dependent formatting
1689*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/905).
1690*5c90c05cSAndroid Build Coastguard Worker
1691*5c90c05cSAndroid Build Coastguard Worker- Fixed various compiler warnings and errors
1692*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/882,
1693*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/886,
1694*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/933,
1695*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/941,
1696*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/931,
1697*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/943,
1698*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/954,
1699*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/956,
1700*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/962,
1701*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/965,
1702*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/977,
1703*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/983,
1704*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/989).
1705*5c90c05cSAndroid Build Coastguard Worker  Thanks @Luthaf, @stevenhoving, @christinaa, @lgritz, @DanielaE,
1706*5c90c05cSAndroid Build Coastguard Worker  @0x8000-0000 and @liuping1997.
1707*5c90c05cSAndroid Build Coastguard Worker
1708*5c90c05cSAndroid Build Coastguard Worker# 5.2.1 - 2018-09-21
1709*5c90c05cSAndroid Build Coastguard Worker
1710*5c90c05cSAndroid Build Coastguard Worker- Fixed `visit` lookup issues on gcc 7 & 8
1711*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/870). Thanks @medithe.
1712*5c90c05cSAndroid Build Coastguard Worker- Fixed linkage errors on older gcc.
1713*5c90c05cSAndroid Build Coastguard Worker- Prevented `fmt/range.h` from specializing `fmt::basic_string_view`
1714*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/865,
1715*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/868). Thanks @hhggit.
1716*5c90c05cSAndroid Build Coastguard Worker- Improved error message when formatting unknown types
1717*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/872). Thanks @foonathan.
1718*5c90c05cSAndroid Build Coastguard Worker- Disabled templated user-defined literals when compiled under nvcc
1719*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/875). Thanks @CandyGumdrop.
1720*5c90c05cSAndroid Build Coastguard Worker- Fixed `format_to` formatting to `wmemory_buffer`
1721*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/874).
1722*5c90c05cSAndroid Build Coastguard Worker
1723*5c90c05cSAndroid Build Coastguard Worker# 5.2.0 - 2018-09-13
1724*5c90c05cSAndroid Build Coastguard Worker
1725*5c90c05cSAndroid Build Coastguard Worker- Optimized format string parsing and argument processing which
1726*5c90c05cSAndroid Build Coastguard Worker  resulted in up to 5x speed up on long format strings and significant
1727*5c90c05cSAndroid Build Coastguard Worker  performance boost on various benchmarks. For example, version 5.2 is
1728*5c90c05cSAndroid Build Coastguard Worker  2.22x faster than 5.1 on decimal integer formatting with `format_to`
1729*5c90c05cSAndroid Build Coastguard Worker  (macOS, clang-902.0.39.2):
1730*5c90c05cSAndroid Build Coastguard Worker
1731*5c90c05cSAndroid Build Coastguard Worker  | Method                     | Time, s         | Speedup |
1732*5c90c05cSAndroid Build Coastguard Worker  | -------------------------- | --------------: | ------: |
1733*5c90c05cSAndroid Build Coastguard Worker  | fmt::format 5.1            | 0.58            |         |
1734*5c90c05cSAndroid Build Coastguard Worker  | fmt::format 5.2            | 0.35            |   1.66x |
1735*5c90c05cSAndroid Build Coastguard Worker  | fmt::format_to 5.1         | 0.51            |         |
1736*5c90c05cSAndroid Build Coastguard Worker  | fmt::format_to 5.2         | 0.23            |   2.22x |
1737*5c90c05cSAndroid Build Coastguard Worker  | sprintf                    | 0.71            |         |
1738*5c90c05cSAndroid Build Coastguard Worker  | std::to_string             | 1.01            |         |
1739*5c90c05cSAndroid Build Coastguard Worker  | std::stringstream          | 1.73            |         |
1740*5c90c05cSAndroid Build Coastguard Worker
1741*5c90c05cSAndroid Build Coastguard Worker- Changed the `fmt` macro from opt-out to opt-in to prevent name
1742*5c90c05cSAndroid Build Coastguard Worker  collisions. To enable it define the `FMT_STRING_ALIAS` macro to 1
1743*5c90c05cSAndroid Build Coastguard Worker  before including `fmt/format.h`:
1744*5c90c05cSAndroid Build Coastguard Worker
1745*5c90c05cSAndroid Build Coastguard Worker  ```c++
1746*5c90c05cSAndroid Build Coastguard Worker  #define FMT_STRING_ALIAS 1
1747*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
1748*5c90c05cSAndroid Build Coastguard Worker  std::string answer = format(fmt("{}"), 42);
1749*5c90c05cSAndroid Build Coastguard Worker  ```
1750*5c90c05cSAndroid Build Coastguard Worker
1751*5c90c05cSAndroid Build Coastguard Worker- Added compile-time format string checks to `format_to` overload that
1752*5c90c05cSAndroid Build Coastguard Worker  takes `fmt::memory_buffer`
1753*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/783):
1754*5c90c05cSAndroid Build Coastguard Worker
1755*5c90c05cSAndroid Build Coastguard Worker  ```c++
1756*5c90c05cSAndroid Build Coastguard Worker  fmt::memory_buffer buf;
1757*5c90c05cSAndroid Build Coastguard Worker  // Compile-time error: invalid type specifier.
1758*5c90c05cSAndroid Build Coastguard Worker  fmt::format_to(buf, fmt("{:d}"), "foo");
1759*5c90c05cSAndroid Build Coastguard Worker  ```
1760*5c90c05cSAndroid Build Coastguard Worker
1761*5c90c05cSAndroid Build Coastguard Worker- Moved experimental color support to `fmt/color.h` and enabled the
1762*5c90c05cSAndroid Build Coastguard Worker  new API by default. The old API can be enabled by defining the
1763*5c90c05cSAndroid Build Coastguard Worker  `FMT_DEPRECATED_COLORS` macro.
1764*5c90c05cSAndroid Build Coastguard Worker
1765*5c90c05cSAndroid Build Coastguard Worker- Added formatting support for types explicitly convertible to
1766*5c90c05cSAndroid Build Coastguard Worker  `fmt::string_view`:
1767*5c90c05cSAndroid Build Coastguard Worker
1768*5c90c05cSAndroid Build Coastguard Worker  ```c++
1769*5c90c05cSAndroid Build Coastguard Worker  struct foo {
1770*5c90c05cSAndroid Build Coastguard Worker    explicit operator fmt::string_view() const { return "foo"; }
1771*5c90c05cSAndroid Build Coastguard Worker  };
1772*5c90c05cSAndroid Build Coastguard Worker  auto s = format("{}", foo());
1773*5c90c05cSAndroid Build Coastguard Worker  ```
1774*5c90c05cSAndroid Build Coastguard Worker
1775*5c90c05cSAndroid Build Coastguard Worker  In particular, this makes formatting function work with
1776*5c90c05cSAndroid Build Coastguard Worker  `folly::StringPiece`.
1777*5c90c05cSAndroid Build Coastguard Worker
1778*5c90c05cSAndroid Build Coastguard Worker- Implemented preliminary support for `char*_t` by replacing the
1779*5c90c05cSAndroid Build Coastguard Worker  `format` function overloads with a single function template
1780*5c90c05cSAndroid Build Coastguard Worker  parameterized on the string type.
1781*5c90c05cSAndroid Build Coastguard Worker
1782*5c90c05cSAndroid Build Coastguard Worker- Added support for dynamic argument lists
1783*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/814,
1784*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/819). Thanks @MikePopoloski.
1785*5c90c05cSAndroid Build Coastguard Worker
1786*5c90c05cSAndroid Build Coastguard Worker- Reduced executable size overhead for embedded targets using newlib
1787*5c90c05cSAndroid Build Coastguard Worker  nano by making locale dependency optional
1788*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/839). Thanks @teajay-fr.
1789*5c90c05cSAndroid Build Coastguard Worker
1790*5c90c05cSAndroid Build Coastguard Worker- Keep `noexcept` specifier when exceptions are disabled
1791*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/801,
1792*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/810). Thanks @qis.
1793*5c90c05cSAndroid Build Coastguard Worker
1794*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of user-defined types providing `operator<<` with
1795*5c90c05cSAndroid Build Coastguard Worker  `format_to_n` (https://github.com/fmtlib/fmt/pull/806).
1796*5c90c05cSAndroid Build Coastguard Worker  Thanks @mkurdej.
1797*5c90c05cSAndroid Build Coastguard Worker
1798*5c90c05cSAndroid Build Coastguard Worker- Fixed dynamic linkage of new symbols
1799*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/808).
1800*5c90c05cSAndroid Build Coastguard Worker
1801*5c90c05cSAndroid Build Coastguard Worker- Fixed global initialization issue
1802*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/807):
1803*5c90c05cSAndroid Build Coastguard Worker
1804*5c90c05cSAndroid Build Coastguard Worker  ```c++
1805*5c90c05cSAndroid Build Coastguard Worker  // This works on compilers with constexpr support.
1806*5c90c05cSAndroid Build Coastguard Worker  static const std::string answer = fmt::format("{}", 42);
1807*5c90c05cSAndroid Build Coastguard Worker  ```
1808*5c90c05cSAndroid Build Coastguard Worker
1809*5c90c05cSAndroid Build Coastguard Worker- Fixed various compiler warnings and errors
1810*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/804,
1811*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/809,
1812*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/811,
1813*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/822,
1814*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/827,
1815*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/830,
1816*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/838,
1817*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/843,
1818*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/844,
1819*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/851,
1820*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/852,
1821*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/854).
1822*5c90c05cSAndroid Build Coastguard Worker  Thanks @henryiii, @medithe, and @eliasdaler.
1823*5c90c05cSAndroid Build Coastguard Worker
1824*5c90c05cSAndroid Build Coastguard Worker# 5.1.0 - 2018-07-05
1825*5c90c05cSAndroid Build Coastguard Worker
1826*5c90c05cSAndroid Build Coastguard Worker- Added experimental support for RGB color output enabled with the
1827*5c90c05cSAndroid Build Coastguard Worker  `FMT_EXTENDED_COLORS` macro:
1828*5c90c05cSAndroid Build Coastguard Worker
1829*5c90c05cSAndroid Build Coastguard Worker  ```c++
1830*5c90c05cSAndroid Build Coastguard Worker  #define FMT_EXTENDED_COLORS
1831*5c90c05cSAndroid Build Coastguard Worker  #define FMT_HEADER_ONLY // or compile fmt with FMT_EXTENDED_COLORS defined
1832*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
1833*5c90c05cSAndroid Build Coastguard Worker
1834*5c90c05cSAndroid Build Coastguard Worker  fmt::print(fmt::color::steel_blue, "Some beautiful text");
1835*5c90c05cSAndroid Build Coastguard Worker  ```
1836*5c90c05cSAndroid Build Coastguard Worker
1837*5c90c05cSAndroid Build Coastguard Worker  The old API (the `print_colored` and `vprint_colored` functions and
1838*5c90c05cSAndroid Build Coastguard Worker  the `color` enum) is now deprecated.
1839*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/762
1840*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/767). thanks @Remotion.
1841*5c90c05cSAndroid Build Coastguard Worker
1842*5c90c05cSAndroid Build Coastguard Worker- Added quotes to strings in ranges and tuples
1843*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/766). Thanks @Remotion.
1844*5c90c05cSAndroid Build Coastguard Worker
1845*5c90c05cSAndroid Build Coastguard Worker- Made `format_to` work with `basic_memory_buffer`
1846*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/776).
1847*5c90c05cSAndroid Build Coastguard Worker
1848*5c90c05cSAndroid Build Coastguard Worker- Added `vformat_to_n` and `wchar_t` overload of `format_to_n`
1849*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/764,
1850*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/769).
1851*5c90c05cSAndroid Build Coastguard Worker
1852*5c90c05cSAndroid Build Coastguard Worker- Made `is_range` and `is_tuple_like` part of public (experimental)
1853*5c90c05cSAndroid Build Coastguard Worker  API to allow specialization for user-defined types
1854*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/751,
1855*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/759). Thanks @drrlvn.
1856*5c90c05cSAndroid Build Coastguard Worker
1857*5c90c05cSAndroid Build Coastguard Worker- Added more compilers to continuous integration and increased
1858*5c90c05cSAndroid Build Coastguard Worker  `FMT_PEDANTIC` warning levels
1859*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/736). Thanks @eliaskosunen.
1860*5c90c05cSAndroid Build Coastguard Worker
1861*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation with MSVC 2013.
1862*5c90c05cSAndroid Build Coastguard Worker
1863*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of user-defined types in `format_to`
1864*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/793).
1865*5c90c05cSAndroid Build Coastguard Worker
1866*5c90c05cSAndroid Build Coastguard Worker- Forced linking of inline `vformat` functions into the library
1867*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/795).
1868*5c90c05cSAndroid Build Coastguard Worker
1869*5c90c05cSAndroid Build Coastguard Worker- Fixed incorrect call to on_align in `'{:}='`
1870*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/750).
1871*5c90c05cSAndroid Build Coastguard Worker
1872*5c90c05cSAndroid Build Coastguard Worker- Fixed floating-point formatting to a non-back_insert_iterator with
1873*5c90c05cSAndroid Build Coastguard Worker  sign & numeric alignment specified
1874*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/756).
1875*5c90c05cSAndroid Build Coastguard Worker
1876*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting to an array with `format_to_n`
1877*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/778).
1878*5c90c05cSAndroid Build Coastguard Worker
1879*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of more than 15 named arguments
1880*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/754).
1881*5c90c05cSAndroid Build Coastguard Worker
1882*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of compile-time strings when including
1883*5c90c05cSAndroid Build Coastguard Worker  `fmt/ostream.h`. (https://github.com/fmtlib/fmt/issues/768).
1884*5c90c05cSAndroid Build Coastguard Worker
1885*5c90c05cSAndroid Build Coastguard Worker- Fixed various compiler warnings and errors
1886*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/742,
1887*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/748,
1888*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/752,
1889*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/770,
1890*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/775,
1891*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/779,
1892*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/780,
1893*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/790,
1894*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/792,
1895*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/800).
1896*5c90c05cSAndroid Build Coastguard Worker  Thanks @Remotion, @gabime, @foonathan, @Dark-Passenger and @0x8000-0000.
1897*5c90c05cSAndroid Build Coastguard Worker
1898*5c90c05cSAndroid Build Coastguard Worker# 5.0.0 - 2018-05-21
1899*5c90c05cSAndroid Build Coastguard Worker
1900*5c90c05cSAndroid Build Coastguard Worker- Added a requirement for partial C++11 support, most importantly
1901*5c90c05cSAndroid Build Coastguard Worker  variadic templates and type traits, and dropped `FMT_VARIADIC_*`
1902*5c90c05cSAndroid Build Coastguard Worker  emulation macros. Variadic templates are available since GCC 4.4,
1903*5c90c05cSAndroid Build Coastguard Worker  Clang 2.9 and MSVC 18.0 (2013). For older compilers use {fmt}
1904*5c90c05cSAndroid Build Coastguard Worker  [version 4.x](https://github.com/fmtlib/fmt/releases/tag/4.1.0)
1905*5c90c05cSAndroid Build Coastguard Worker  which continues to be maintained and works with C++98 compilers.
1906*5c90c05cSAndroid Build Coastguard Worker
1907*5c90c05cSAndroid Build Coastguard Worker- Renamed symbols to follow standard C++ naming conventions and
1908*5c90c05cSAndroid Build Coastguard Worker  proposed a subset of the library for standardization in [P0645R2
1909*5c90c05cSAndroid Build Coastguard Worker  Text Formatting](https://wg21.link/P0645).
1910*5c90c05cSAndroid Build Coastguard Worker
1911*5c90c05cSAndroid Build Coastguard Worker- Implemented `constexpr` parsing of format strings and [compile-time
1912*5c90c05cSAndroid Build Coastguard Worker  format string
1913*5c90c05cSAndroid Build Coastguard Worker  checks](https://fmt.dev/latest/api.html#compile-time-format-string-checks).
1914*5c90c05cSAndroid Build Coastguard Worker  For example
1915*5c90c05cSAndroid Build Coastguard Worker
1916*5c90c05cSAndroid Build Coastguard Worker  ```c++
1917*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
1918*5c90c05cSAndroid Build Coastguard Worker
1919*5c90c05cSAndroid Build Coastguard Worker  std::string s = format(fmt("{:d}"), "foo");
1920*5c90c05cSAndroid Build Coastguard Worker  ```
1921*5c90c05cSAndroid Build Coastguard Worker
1922*5c90c05cSAndroid Build Coastguard Worker  gives a compile-time error because `d` is an invalid specifier for
1923*5c90c05cSAndroid Build Coastguard Worker  strings ([godbolt](https://godbolt.org/g/rnCy9Q)):
1924*5c90c05cSAndroid Build Coastguard Worker
1925*5c90c05cSAndroid Build Coastguard Worker      ...
1926*5c90c05cSAndroid Build Coastguard Worker      <source>:4:19: note: in instantiation of function template specialization 'fmt::v5::format<S, char [4]>' requested here
1927*5c90c05cSAndroid Build Coastguard Worker        std::string s = format(fmt("{:d}"), "foo");
1928*5c90c05cSAndroid Build Coastguard Worker                        ^
1929*5c90c05cSAndroid Build Coastguard Worker      format.h:1337:13: note: non-constexpr function 'on_error' cannot be used in a constant expression
1930*5c90c05cSAndroid Build Coastguard Worker          handler.on_error("invalid type specifier");
1931*5c90c05cSAndroid Build Coastguard Worker
1932*5c90c05cSAndroid Build Coastguard Worker  Compile-time checks require relaxed `constexpr` (C++14 feature)
1933*5c90c05cSAndroid Build Coastguard Worker  support. If the latter is not available, checks will be performed at
1934*5c90c05cSAndroid Build Coastguard Worker  runtime.
1935*5c90c05cSAndroid Build Coastguard Worker
1936*5c90c05cSAndroid Build Coastguard Worker- Separated format string parsing and formatting in the extension API
1937*5c90c05cSAndroid Build Coastguard Worker  to enable compile-time format string processing. For example
1938*5c90c05cSAndroid Build Coastguard Worker
1939*5c90c05cSAndroid Build Coastguard Worker  ```c++
1940*5c90c05cSAndroid Build Coastguard Worker  struct Answer {};
1941*5c90c05cSAndroid Build Coastguard Worker
1942*5c90c05cSAndroid Build Coastguard Worker  namespace fmt {
1943*5c90c05cSAndroid Build Coastguard Worker  template <>
1944*5c90c05cSAndroid Build Coastguard Worker  struct formatter<Answer> {
1945*5c90c05cSAndroid Build Coastguard Worker    constexpr auto parse(parse_context& ctx) {
1946*5c90c05cSAndroid Build Coastguard Worker      auto it = ctx.begin();
1947*5c90c05cSAndroid Build Coastguard Worker      spec = *it;
1948*5c90c05cSAndroid Build Coastguard Worker      if (spec != 'd' && spec != 's')
1949*5c90c05cSAndroid Build Coastguard Worker        throw format_error("invalid specifier");
1950*5c90c05cSAndroid Build Coastguard Worker      return ++it;
1951*5c90c05cSAndroid Build Coastguard Worker    }
1952*5c90c05cSAndroid Build Coastguard Worker
1953*5c90c05cSAndroid Build Coastguard Worker    template <typename FormatContext>
1954*5c90c05cSAndroid Build Coastguard Worker    auto format(Answer, FormatContext& ctx) {
1955*5c90c05cSAndroid Build Coastguard Worker      return spec == 's' ?
1956*5c90c05cSAndroid Build Coastguard Worker        format_to(ctx.begin(), "{}", "fourty-two") :
1957*5c90c05cSAndroid Build Coastguard Worker        format_to(ctx.begin(), "{}", 42);
1958*5c90c05cSAndroid Build Coastguard Worker    }
1959*5c90c05cSAndroid Build Coastguard Worker
1960*5c90c05cSAndroid Build Coastguard Worker    char spec = 0;
1961*5c90c05cSAndroid Build Coastguard Worker  };
1962*5c90c05cSAndroid Build Coastguard Worker  }
1963*5c90c05cSAndroid Build Coastguard Worker
1964*5c90c05cSAndroid Build Coastguard Worker  std::string s = format(fmt("{:x}"), Answer());
1965*5c90c05cSAndroid Build Coastguard Worker  ```
1966*5c90c05cSAndroid Build Coastguard Worker
1967*5c90c05cSAndroid Build Coastguard Worker  gives a compile-time error due to invalid format specifier
1968*5c90c05cSAndroid Build Coastguard Worker  ([godbolt](https://godbolt.org/g/2jQ1Dv)):
1969*5c90c05cSAndroid Build Coastguard Worker
1970*5c90c05cSAndroid Build Coastguard Worker      ...
1971*5c90c05cSAndroid Build Coastguard Worker      <source>:12:45: error: expression '<throw-expression>' is not a constant expression
1972*5c90c05cSAndroid Build Coastguard Worker             throw format_error("invalid specifier");
1973*5c90c05cSAndroid Build Coastguard Worker
1974*5c90c05cSAndroid Build Coastguard Worker- Added [iterator
1975*5c90c05cSAndroid Build Coastguard Worker  support](https://fmt.dev/latest/api.html#output-iterator-support):
1976*5c90c05cSAndroid Build Coastguard Worker
1977*5c90c05cSAndroid Build Coastguard Worker  ```c++
1978*5c90c05cSAndroid Build Coastguard Worker  #include <vector>
1979*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
1980*5c90c05cSAndroid Build Coastguard Worker
1981*5c90c05cSAndroid Build Coastguard Worker  std::vector<char> out;
1982*5c90c05cSAndroid Build Coastguard Worker  fmt::format_to(std::back_inserter(out), "{}", 42);
1983*5c90c05cSAndroid Build Coastguard Worker  ```
1984*5c90c05cSAndroid Build Coastguard Worker
1985*5c90c05cSAndroid Build Coastguard Worker- Added the
1986*5c90c05cSAndroid Build Coastguard Worker  [format_to_n](https://fmt.dev/latest/api.html#_CPPv2N3fmt11format_to_nE8OutputItNSt6size_tE11string_viewDpRK4Args)
1987*5c90c05cSAndroid Build Coastguard Worker  function that restricts the output to the specified number of
1988*5c90c05cSAndroid Build Coastguard Worker  characters (https://github.com/fmtlib/fmt/issues/298):
1989*5c90c05cSAndroid Build Coastguard Worker
1990*5c90c05cSAndroid Build Coastguard Worker  ```c++
1991*5c90c05cSAndroid Build Coastguard Worker  char out[4];
1992*5c90c05cSAndroid Build Coastguard Worker  fmt::format_to_n(out, sizeof(out), "{}", 12345);
1993*5c90c05cSAndroid Build Coastguard Worker  // out == "1234" (without terminating '\0')
1994*5c90c05cSAndroid Build Coastguard Worker  ```
1995*5c90c05cSAndroid Build Coastguard Worker
1996*5c90c05cSAndroid Build Coastguard Worker- Added the [formatted_size](
1997*5c90c05cSAndroid Build Coastguard Worker  https://fmt.dev/latest/api.html#_CPPv2N3fmt14formatted_sizeE11string_viewDpRK4Args)
1998*5c90c05cSAndroid Build Coastguard Worker  function for computing the output size:
1999*5c90c05cSAndroid Build Coastguard Worker
2000*5c90c05cSAndroid Build Coastguard Worker  ```c++
2001*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/format.h>
2002*5c90c05cSAndroid Build Coastguard Worker
2003*5c90c05cSAndroid Build Coastguard Worker  auto size = fmt::formatted_size("{}", 12345); // size == 5
2004*5c90c05cSAndroid Build Coastguard Worker  ```
2005*5c90c05cSAndroid Build Coastguard Worker
2006*5c90c05cSAndroid Build Coastguard Worker- Improved compile times by reducing dependencies on standard headers
2007*5c90c05cSAndroid Build Coastguard Worker  and providing a lightweight [core
2008*5c90c05cSAndroid Build Coastguard Worker  API](https://fmt.dev/latest/api.html#core-api):
2009*5c90c05cSAndroid Build Coastguard Worker
2010*5c90c05cSAndroid Build Coastguard Worker  ```c++
2011*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
2012*5c90c05cSAndroid Build Coastguard Worker
2013*5c90c05cSAndroid Build Coastguard Worker  fmt::print("The answer is {}.", 42);
2014*5c90c05cSAndroid Build Coastguard Worker  ```
2015*5c90c05cSAndroid Build Coastguard Worker
2016*5c90c05cSAndroid Build Coastguard Worker  See [Compile time and code
2017*5c90c05cSAndroid Build Coastguard Worker  bloat](https://github.com/fmtlib/fmt#compile-time-and-code-bloat).
2018*5c90c05cSAndroid Build Coastguard Worker
2019*5c90c05cSAndroid Build Coastguard Worker- Added the [make_format_args](
2020*5c90c05cSAndroid Build Coastguard Worker  https://fmt.dev/latest/api.html#_CPPv2N3fmt16make_format_argsEDpRK4Args)
2021*5c90c05cSAndroid Build Coastguard Worker  function for capturing formatting arguments:
2022*5c90c05cSAndroid Build Coastguard Worker
2023*5c90c05cSAndroid Build Coastguard Worker  ```c++
2024*5c90c05cSAndroid Build Coastguard Worker  // Prints formatted error message.
2025*5c90c05cSAndroid Build Coastguard Worker  void vreport_error(const char *format, fmt::format_args args) {
2026*5c90c05cSAndroid Build Coastguard Worker    fmt::print("Error: ");
2027*5c90c05cSAndroid Build Coastguard Worker    fmt::vprint(format, args);
2028*5c90c05cSAndroid Build Coastguard Worker  }
2029*5c90c05cSAndroid Build Coastguard Worker  template <typename... Args>
2030*5c90c05cSAndroid Build Coastguard Worker  void report_error(const char *format, const Args & ... args) {
2031*5c90c05cSAndroid Build Coastguard Worker    vreport_error(format, fmt::make_format_args(args...));
2032*5c90c05cSAndroid Build Coastguard Worker  }
2033*5c90c05cSAndroid Build Coastguard Worker  ```
2034*5c90c05cSAndroid Build Coastguard Worker
2035*5c90c05cSAndroid Build Coastguard Worker- Added the `make_printf_args` function for capturing `printf`
2036*5c90c05cSAndroid Build Coastguard Worker  arguments (https://github.com/fmtlib/fmt/issues/687,
2037*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/694). Thanks @Kronuz.
2038*5c90c05cSAndroid Build Coastguard Worker
2039*5c90c05cSAndroid Build Coastguard Worker- Added prefix `v` to non-variadic functions taking `format_args` to
2040*5c90c05cSAndroid Build Coastguard Worker  distinguish them from variadic ones:
2041*5c90c05cSAndroid Build Coastguard Worker
2042*5c90c05cSAndroid Build Coastguard Worker  ```c++
2043*5c90c05cSAndroid Build Coastguard Worker  std::string vformat(string_view format_str, format_args args);
2044*5c90c05cSAndroid Build Coastguard Worker
2045*5c90c05cSAndroid Build Coastguard Worker  template <typename... Args>
2046*5c90c05cSAndroid Build Coastguard Worker  std::string format(string_view format_str, const Args & ... args);
2047*5c90c05cSAndroid Build Coastguard Worker  ```
2048*5c90c05cSAndroid Build Coastguard Worker
2049*5c90c05cSAndroid Build Coastguard Worker- Added experimental support for formatting ranges, containers and
2050*5c90c05cSAndroid Build Coastguard Worker  tuple-like types in `fmt/ranges.h`
2051*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/735):
2052*5c90c05cSAndroid Build Coastguard Worker
2053*5c90c05cSAndroid Build Coastguard Worker  ```c++
2054*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/ranges.h>
2055*5c90c05cSAndroid Build Coastguard Worker
2056*5c90c05cSAndroid Build Coastguard Worker  std::vector<int> v = {1, 2, 3};
2057*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{}", v); // prints {1, 2, 3}
2058*5c90c05cSAndroid Build Coastguard Worker  ```
2059*5c90c05cSAndroid Build Coastguard Worker
2060*5c90c05cSAndroid Build Coastguard Worker  Thanks @Remotion.
2061*5c90c05cSAndroid Build Coastguard Worker
2062*5c90c05cSAndroid Build Coastguard Worker- Implemented `wchar_t` date and time formatting
2063*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/712):
2064*5c90c05cSAndroid Build Coastguard Worker
2065*5c90c05cSAndroid Build Coastguard Worker  ```c++
2066*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/time.h>
2067*5c90c05cSAndroid Build Coastguard Worker
2068*5c90c05cSAndroid Build Coastguard Worker  std::time_t t = std::time(nullptr);
2069*5c90c05cSAndroid Build Coastguard Worker  auto s = fmt::format(L"The date is {:%Y-%m-%d}.", *std::localtime(&t));
2070*5c90c05cSAndroid Build Coastguard Worker  ```
2071*5c90c05cSAndroid Build Coastguard Worker
2072*5c90c05cSAndroid Build Coastguard Worker  Thanks @DanielaE.
2073*5c90c05cSAndroid Build Coastguard Worker
2074*5c90c05cSAndroid Build Coastguard Worker- Provided more wide string overloads
2075*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/724). Thanks @DanielaE.
2076*5c90c05cSAndroid Build Coastguard Worker
2077*5c90c05cSAndroid Build Coastguard Worker- Switched from a custom null-terminated string view class to
2078*5c90c05cSAndroid Build Coastguard Worker  `string_view` in the format API and provided `fmt::string_view`
2079*5c90c05cSAndroid Build Coastguard Worker  which implements a subset of `std::string_view` API for pre-C++17
2080*5c90c05cSAndroid Build Coastguard Worker  systems.
2081*5c90c05cSAndroid Build Coastguard Worker
2082*5c90c05cSAndroid Build Coastguard Worker- Added support for `std::experimental::string_view`
2083*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/607):
2084*5c90c05cSAndroid Build Coastguard Worker
2085*5c90c05cSAndroid Build Coastguard Worker  ```c++
2086*5c90c05cSAndroid Build Coastguard Worker  #include <fmt/core.h>
2087*5c90c05cSAndroid Build Coastguard Worker  #include <experimental/string_view>
2088*5c90c05cSAndroid Build Coastguard Worker
2089*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{}", std::experimental::string_view("foo"));
2090*5c90c05cSAndroid Build Coastguard Worker  ```
2091*5c90c05cSAndroid Build Coastguard Worker
2092*5c90c05cSAndroid Build Coastguard Worker  Thanks @virgiliofornazin.
2093*5c90c05cSAndroid Build Coastguard Worker
2094*5c90c05cSAndroid Build Coastguard Worker- Allowed mixing named and automatic arguments:
2095*5c90c05cSAndroid Build Coastguard Worker
2096*5c90c05cSAndroid Build Coastguard Worker  ```c++
2097*5c90c05cSAndroid Build Coastguard Worker  fmt::format("{} {two}", 1, fmt::arg("two", 2));
2098*5c90c05cSAndroid Build Coastguard Worker  ```
2099*5c90c05cSAndroid Build Coastguard Worker
2100*5c90c05cSAndroid Build Coastguard Worker- Removed the write API in favor of the [format
2101*5c90c05cSAndroid Build Coastguard Worker  API](https://fmt.dev/latest/api.html#format-api) with compile-time
2102*5c90c05cSAndroid Build Coastguard Worker  handling of format strings.
2103*5c90c05cSAndroid Build Coastguard Worker
2104*5c90c05cSAndroid Build Coastguard Worker- Disallowed formatting of multibyte strings into a wide character
2105*5c90c05cSAndroid Build Coastguard Worker  target (https://github.com/fmtlib/fmt/pull/606).
2106*5c90c05cSAndroid Build Coastguard Worker
2107*5c90c05cSAndroid Build Coastguard Worker- Improved documentation
2108*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/515,
2109*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/614,
2110*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/617,
2111*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/661,
2112*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/680).
2113*5c90c05cSAndroid Build Coastguard Worker  Thanks @ibell, @mihaitodor and @johnthagen.
2114*5c90c05cSAndroid Build Coastguard Worker
2115*5c90c05cSAndroid Build Coastguard Worker- Implemented more efficient handling of large number of format
2116*5c90c05cSAndroid Build Coastguard Worker  arguments.
2117*5c90c05cSAndroid Build Coastguard Worker
2118*5c90c05cSAndroid Build Coastguard Worker- Introduced an inline namespace for symbol versioning.
2119*5c90c05cSAndroid Build Coastguard Worker
2120*5c90c05cSAndroid Build Coastguard Worker- Added debug postfix `d` to the `fmt` library name
2121*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/636).
2122*5c90c05cSAndroid Build Coastguard Worker
2123*5c90c05cSAndroid Build Coastguard Worker- Removed unnecessary `fmt/` prefix in includes
2124*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/397). Thanks @chronoxor.
2125*5c90c05cSAndroid Build Coastguard Worker
2126*5c90c05cSAndroid Build Coastguard Worker- Moved `fmt/*.h` to `include/fmt/*.h` to prevent irrelevant files and
2127*5c90c05cSAndroid Build Coastguard Worker  directories appearing on the include search paths when fmt is used
2128*5c90c05cSAndroid Build Coastguard Worker  as a subproject and moved source files to the `src` directory.
2129*5c90c05cSAndroid Build Coastguard Worker
2130*5c90c05cSAndroid Build Coastguard Worker- Added qmake project file `support/fmt.pro`
2131*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/641). Thanks @cowo78.
2132*5c90c05cSAndroid Build Coastguard Worker
2133*5c90c05cSAndroid Build Coastguard Worker- Added Gradle build file `support/build.gradle`
2134*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/649). Thanks @luncliff.
2135*5c90c05cSAndroid Build Coastguard Worker
2136*5c90c05cSAndroid Build Coastguard Worker- Removed `FMT_CPPFORMAT` CMake option.
2137*5c90c05cSAndroid Build Coastguard Worker
2138*5c90c05cSAndroid Build Coastguard Worker- Fixed a name conflict with the macro `CHAR_WIDTH` in glibc
2139*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/616). Thanks @aroig.
2140*5c90c05cSAndroid Build Coastguard Worker
2141*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of nested braces in `fmt::join`
2142*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/638).
2143*5c90c05cSAndroid Build Coastguard Worker
2144*5c90c05cSAndroid Build Coastguard Worker- Added `SOURCELINK_SUFFIX` for compatibility with Sphinx 1.5
2145*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/497). Thanks @ginggs.
2146*5c90c05cSAndroid Build Coastguard Worker
2147*5c90c05cSAndroid Build Coastguard Worker- Added a missing `inline` in the header-only mode
2148*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/626). Thanks @aroig.
2149*5c90c05cSAndroid Build Coastguard Worker
2150*5c90c05cSAndroid Build Coastguard Worker- Fixed various compiler warnings
2151*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/640,
2152*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/656,
2153*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/679,
2154*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/681,
2155*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/705,
2156*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/715,
2157*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/717,
2158*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/720,
2159*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/723,
2160*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/726,
2161*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/730,
2162*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/739).
2163*5c90c05cSAndroid Build Coastguard Worker  Thanks @peterbell10, @LarsGullik, @foonathan, @eliaskosunen,
2164*5c90c05cSAndroid Build Coastguard Worker  @christianparpart, @DanielaE and @mwinterb.
2165*5c90c05cSAndroid Build Coastguard Worker
2166*5c90c05cSAndroid Build Coastguard Worker- Worked around an MSVC bug and fixed several warnings
2167*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/653). Thanks @alabuzhev.
2168*5c90c05cSAndroid Build Coastguard Worker
2169*5c90c05cSAndroid Build Coastguard Worker- Worked around GCC bug 67371
2170*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/682).
2171*5c90c05cSAndroid Build Coastguard Worker
2172*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation with `-fno-exceptions`
2173*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/655). Thanks @chenxiaolong.
2174*5c90c05cSAndroid Build Coastguard Worker
2175*5c90c05cSAndroid Build Coastguard Worker- Made `constexpr remove_prefix` gcc version check tighter
2176*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/648).
2177*5c90c05cSAndroid Build Coastguard Worker
2178*5c90c05cSAndroid Build Coastguard Worker- Renamed internal type enum constants to prevent collision with
2179*5c90c05cSAndroid Build Coastguard Worker  poorly written C libraries
2180*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/644).
2181*5c90c05cSAndroid Build Coastguard Worker
2182*5c90c05cSAndroid Build Coastguard Worker- Added detection of `wostream operator<<`
2183*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/650).
2184*5c90c05cSAndroid Build Coastguard Worker
2185*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation on OpenBSD
2186*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/660). Thanks @hubslave.
2187*5c90c05cSAndroid Build Coastguard Worker
2188*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation on FreeBSD 12
2189*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/732). Thanks @dankm.
2190*5c90c05cSAndroid Build Coastguard Worker
2191*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation when there is a mismatch between `-std` options
2192*5c90c05cSAndroid Build Coastguard Worker  between the library and user code
2193*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/664).
2194*5c90c05cSAndroid Build Coastguard Worker
2195*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation with GCC 7 and `-std=c++11`
2196*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/734).
2197*5c90c05cSAndroid Build Coastguard Worker
2198*5c90c05cSAndroid Build Coastguard Worker- Improved generated binary code on GCC 7 and older
2199*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/668).
2200*5c90c05cSAndroid Build Coastguard Worker
2201*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of numeric alignment with no width
2202*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/675).
2203*5c90c05cSAndroid Build Coastguard Worker
2204*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of empty strings in UTF8/16 converters
2205*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/676). Thanks @vgalka-sl.
2206*5c90c05cSAndroid Build Coastguard Worker
2207*5c90c05cSAndroid Build Coastguard Worker- Fixed formatting of an empty `string_view`
2208*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/689).
2209*5c90c05cSAndroid Build Coastguard Worker
2210*5c90c05cSAndroid Build Coastguard Worker- Fixed detection of `string_view` on libc++
2211*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/686).
2212*5c90c05cSAndroid Build Coastguard Worker
2213*5c90c05cSAndroid Build Coastguard Worker- Fixed DLL issues (https://github.com/fmtlib/fmt/pull/696).
2214*5c90c05cSAndroid Build Coastguard Worker  Thanks @sebkoenig.
2215*5c90c05cSAndroid Build Coastguard Worker
2216*5c90c05cSAndroid Build Coastguard Worker- Fixed compile checks for mixing narrow and wide strings
2217*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/690).
2218*5c90c05cSAndroid Build Coastguard Worker
2219*5c90c05cSAndroid Build Coastguard Worker- Disabled unsafe implicit conversion to `std::string`
2220*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/729).
2221*5c90c05cSAndroid Build Coastguard Worker
2222*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of reused format specs (as in `fmt::join`) for
2223*5c90c05cSAndroid Build Coastguard Worker  pointers (https://github.com/fmtlib/fmt/pull/725). Thanks @mwinterb.
2224*5c90c05cSAndroid Build Coastguard Worker
2225*5c90c05cSAndroid Build Coastguard Worker- Fixed installation of `fmt/ranges.h`
2226*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/738). Thanks @sv1990.
2227*5c90c05cSAndroid Build Coastguard Worker
2228*5c90c05cSAndroid Build Coastguard Worker# 4.1.0 - 2017-12-20
2229*5c90c05cSAndroid Build Coastguard Worker
2230*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::to_wstring()` in addition to `fmt::to_string()`
2231*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/559). Thanks @alabuzhev.
2232*5c90c05cSAndroid Build Coastguard Worker- Added support for C++17 `std::string_view`
2233*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/571 and
2234*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/578).
2235*5c90c05cSAndroid Build Coastguard Worker  Thanks @thelostt and @mwinterb.
2236*5c90c05cSAndroid Build Coastguard Worker- Enabled stream exceptions to catch errors
2237*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/581). Thanks @crusader-mike.
2238*5c90c05cSAndroid Build Coastguard Worker- Allowed formatting of class hierarchies with `fmt::format_arg()`
2239*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/547). Thanks @rollbear.
2240*5c90c05cSAndroid Build Coastguard Worker- Removed limitations on character types
2241*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/563). Thanks @Yelnats321.
2242*5c90c05cSAndroid Build Coastguard Worker- Conditionally enabled use of `std::allocator_traits`
2243*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/583). Thanks @mwinterb.
2244*5c90c05cSAndroid Build Coastguard Worker- Added support for `const` variadic member function emulation with
2245*5c90c05cSAndroid Build Coastguard Worker  `FMT_VARIADIC_CONST`
2246*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/591). Thanks @ludekvodicka.
2247*5c90c05cSAndroid Build Coastguard Worker- Various bugfixes: bad overflow check, unsupported implicit type
2248*5c90c05cSAndroid Build Coastguard Worker  conversion when determining formatting function, test segfaults
2249*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/551), ill-formed
2250*5c90c05cSAndroid Build Coastguard Worker  macros (https://github.com/fmtlib/fmt/pull/542) and
2251*5c90c05cSAndroid Build Coastguard Worker  ambiguous overloads
2252*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/580). Thanks @xylosper.
2253*5c90c05cSAndroid Build Coastguard Worker- Prevented warnings on MSVC
2254*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/605,
2255*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/602, and
2256*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/545), clang
2257*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/582), GCC
2258*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/573), various
2259*5c90c05cSAndroid Build Coastguard Worker  conversion warnings (https://github.com/fmtlib/fmt/pull/609,
2260*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/567,
2261*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/553 and
2262*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/553), and added
2263*5c90c05cSAndroid Build Coastguard Worker  `override` and `[[noreturn]]`
2264*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/549 and
2265*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/555).
2266*5c90c05cSAndroid Build Coastguard Worker  Thanks @alabuzhev, @virgiliofornazin, @alexanderbock, @yumetodo, @VaderY,
2267*5c90c05cSAndroid Build Coastguard Worker  @jpcima, @thelostt and @Manu343726.
2268*5c90c05cSAndroid Build Coastguard Worker- Improved CMake: Used `GNUInstallDirs` to set installation location
2269*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/610) and fixed warnings
2270*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/536 and
2271*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/556).
2272*5c90c05cSAndroid Build Coastguard Worker  Thanks @mikecrowe, @evgen231 and @henryiii.
2273*5c90c05cSAndroid Build Coastguard Worker
2274*5c90c05cSAndroid Build Coastguard Worker# 4.0.0 - 2017-06-27
2275*5c90c05cSAndroid Build Coastguard Worker
2276*5c90c05cSAndroid Build Coastguard Worker- Removed old compatibility headers `cppformat/*.h` and CMake options
2277*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/527). Thanks @maddinat0r.
2278*5c90c05cSAndroid Build Coastguard Worker
2279*5c90c05cSAndroid Build Coastguard Worker- Added `string.h` containing `fmt::to_string()` as alternative to
2280*5c90c05cSAndroid Build Coastguard Worker  `std::to_string()` as well as other string writer functionality
2281*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/326 and
2282*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/441):
2283*5c90c05cSAndroid Build Coastguard Worker
2284*5c90c05cSAndroid Build Coastguard Worker  ```c++
2285*5c90c05cSAndroid Build Coastguard Worker  #include "fmt/string.h"
2286*5c90c05cSAndroid Build Coastguard Worker
2287*5c90c05cSAndroid Build Coastguard Worker  std::string answer = fmt::to_string(42);
2288*5c90c05cSAndroid Build Coastguard Worker  ```
2289*5c90c05cSAndroid Build Coastguard Worker
2290*5c90c05cSAndroid Build Coastguard Worker  Thanks @glebov-andrey.
2291*5c90c05cSAndroid Build Coastguard Worker
2292*5c90c05cSAndroid Build Coastguard Worker- Moved `fmt::printf()` to new `printf.h` header and allowed `%s` as
2293*5c90c05cSAndroid Build Coastguard Worker  generic specifier (https://github.com/fmtlib/fmt/pull/453),
2294*5c90c05cSAndroid Build Coastguard Worker  made `%.f` more conformant to regular `printf()`
2295*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/490), added custom
2296*5c90c05cSAndroid Build Coastguard Worker  writer support (https://github.com/fmtlib/fmt/issues/476)
2297*5c90c05cSAndroid Build Coastguard Worker  and implemented missing custom argument formatting
2298*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/339 and
2299*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/340):
2300*5c90c05cSAndroid Build Coastguard Worker
2301*5c90c05cSAndroid Build Coastguard Worker  ```c++
2302*5c90c05cSAndroid Build Coastguard Worker  #include "fmt/printf.h"
2303*5c90c05cSAndroid Build Coastguard Worker
2304*5c90c05cSAndroid Build Coastguard Worker  // %s format specifier can be used with any argument type.
2305*5c90c05cSAndroid Build Coastguard Worker  fmt::printf("%s", 42);
2306*5c90c05cSAndroid Build Coastguard Worker  ```
2307*5c90c05cSAndroid Build Coastguard Worker
2308*5c90c05cSAndroid Build Coastguard Worker  Thanks @mojoBrendan, @manylegged and @spacemoose.
2309*5c90c05cSAndroid Build Coastguard Worker  See also https://github.com/fmtlib/fmt/issues/360,
2310*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/335 and
2311*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/331.
2312*5c90c05cSAndroid Build Coastguard Worker
2313*5c90c05cSAndroid Build Coastguard Worker- Added `container.h` containing a `BasicContainerWriter` to write to
2314*5c90c05cSAndroid Build Coastguard Worker  containers like `std::vector`
2315*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/450). Thanks @polyvertex.
2316*5c90c05cSAndroid Build Coastguard Worker
2317*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::join()` function that takes a range and formats its
2318*5c90c05cSAndroid Build Coastguard Worker  elements separated by a given string
2319*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/466):
2320*5c90c05cSAndroid Build Coastguard Worker
2321*5c90c05cSAndroid Build Coastguard Worker  ```c++
2322*5c90c05cSAndroid Build Coastguard Worker  #include "fmt/format.h"
2323*5c90c05cSAndroid Build Coastguard Worker
2324*5c90c05cSAndroid Build Coastguard Worker  std::vector<double> v = {1.2, 3.4, 5.6};
2325*5c90c05cSAndroid Build Coastguard Worker  // Prints "(+01.20, +03.40, +05.60)".
2326*5c90c05cSAndroid Build Coastguard Worker  fmt::print("({:+06.2f})", fmt::join(v.begin(), v.end(), ", "));
2327*5c90c05cSAndroid Build Coastguard Worker  ```
2328*5c90c05cSAndroid Build Coastguard Worker
2329*5c90c05cSAndroid Build Coastguard Worker  Thanks @olivier80.
2330*5c90c05cSAndroid Build Coastguard Worker
2331*5c90c05cSAndroid Build Coastguard Worker- Added support for custom formatting specifications to simplify
2332*5c90c05cSAndroid Build Coastguard Worker  customization of built-in formatting
2333*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/444). Thanks @polyvertex.
2334*5c90c05cSAndroid Build Coastguard Worker  See also https://github.com/fmtlib/fmt/issues/439.
2335*5c90c05cSAndroid Build Coastguard Worker
2336*5c90c05cSAndroid Build Coastguard Worker- Added `fmt::format_system_error()` for error code formatting
2337*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/323 and
2338*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/526). Thanks @maddinat0r.
2339*5c90c05cSAndroid Build Coastguard Worker
2340*5c90c05cSAndroid Build Coastguard Worker- Added thread-safe `fmt::localtime()` and `fmt::gmtime()` as
2341*5c90c05cSAndroid Build Coastguard Worker  replacement for the standard version to `time.h`
2342*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/396). Thanks @codicodi.
2343*5c90c05cSAndroid Build Coastguard Worker
2344*5c90c05cSAndroid Build Coastguard Worker- Internal improvements to `NamedArg` and `ArgLists`
2345*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/389 and
2346*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/390). Thanks @chronoxor.
2347*5c90c05cSAndroid Build Coastguard Worker
2348*5c90c05cSAndroid Build Coastguard Worker- Fixed crash due to bug in `FormatBuf`
2349*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/493). Thanks @effzeh. See also
2350*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/480 and
2351*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/491.
2352*5c90c05cSAndroid Build Coastguard Worker
2353*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of wide strings in `fmt::StringWriter`.
2354*5c90c05cSAndroid Build Coastguard Worker
2355*5c90c05cSAndroid Build Coastguard Worker- Improved compiler error messages
2356*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/357).
2357*5c90c05cSAndroid Build Coastguard Worker
2358*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings and issues with various compilers
2359*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/494,
2360*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/499,
2361*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/483,
2362*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/485,
2363*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/482,
2364*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/475,
2365*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/473 and
2366*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/414).
2367*5c90c05cSAndroid Build Coastguard Worker  Thanks @chronoxor, @zhaohuaxishi, @pkestene, @dschmidt and @0x414c.
2368*5c90c05cSAndroid Build Coastguard Worker
2369*5c90c05cSAndroid Build Coastguard Worker- Improved CMake: targets are now namespaced
2370*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/511 and
2371*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/513), supported
2372*5c90c05cSAndroid Build Coastguard Worker  header-only `printf.h`
2373*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/354), fixed issue with
2374*5c90c05cSAndroid Build Coastguard Worker  minimal supported library subset
2375*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/418,
2376*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/419 and
2377*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/420).
2378*5c90c05cSAndroid Build Coastguard Worker  Thanks @bjoernthiel, @niosHD, @LogicalKnight and @alabuzhev.
2379*5c90c05cSAndroid Build Coastguard Worker
2380*5c90c05cSAndroid Build Coastguard Worker- Improved documentation (https://github.com/fmtlib/fmt/pull/393).
2381*5c90c05cSAndroid Build Coastguard Worker  Thanks @pwm1234.
2382*5c90c05cSAndroid Build Coastguard Worker
2383*5c90c05cSAndroid Build Coastguard Worker# 3.0.2 - 2017-06-14
2384*5c90c05cSAndroid Build Coastguard Worker
2385*5c90c05cSAndroid Build Coastguard Worker- Added `FMT_VERSION` macro
2386*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/411).
2387*5c90c05cSAndroid Build Coastguard Worker- Used `FMT_NULL` instead of literal `0`
2388*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/409). Thanks @alabuzhev.
2389*5c90c05cSAndroid Build Coastguard Worker- Added extern templates for `format_float`
2390*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/413).
2391*5c90c05cSAndroid Build Coastguard Worker- Fixed implicit conversion issue
2392*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/507).
2393*5c90c05cSAndroid Build Coastguard Worker- Fixed signbit detection
2394*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/423).
2395*5c90c05cSAndroid Build Coastguard Worker- Fixed naming collision
2396*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/425).
2397*5c90c05cSAndroid Build Coastguard Worker- Fixed missing intrinsic for C++/CLI
2398*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/457). Thanks @calumr.
2399*5c90c05cSAndroid Build Coastguard Worker- Fixed Android detection
2400*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/458). Thanks @Gachapen.
2401*5c90c05cSAndroid Build Coastguard Worker- Use lean `windows.h` if not in header-only mode
2402*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/503). Thanks @Quentin01.
2403*5c90c05cSAndroid Build Coastguard Worker- Fixed issue with CMake exporting C++11 flag
2404*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/455). Thanks @EricWF.
2405*5c90c05cSAndroid Build Coastguard Worker- Fixed issue with nvcc and MSVC compiler bug and MinGW
2406*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/505).
2407*5c90c05cSAndroid Build Coastguard Worker- Fixed DLL issues (https://github.com/fmtlib/fmt/pull/469 and
2408*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/502).
2409*5c90c05cSAndroid Build Coastguard Worker  Thanks @richardeakin and @AndreasSchoenle.
2410*5c90c05cSAndroid Build Coastguard Worker- Fixed test compilation under FreeBSD
2411*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/433).
2412*5c90c05cSAndroid Build Coastguard Worker- Fixed various warnings
2413*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/403,
2414*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/410 and
2415*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/510).
2416*5c90c05cSAndroid Build Coastguard Worker  Thanks @Lecetem, @chenhayat and @trozen.
2417*5c90c05cSAndroid Build Coastguard Worker- Worked around a broken `__builtin_clz` in clang with MS codegen
2418*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/519).
2419*5c90c05cSAndroid Build Coastguard Worker- Removed redundant include
2420*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/479).
2421*5c90c05cSAndroid Build Coastguard Worker- Fixed documentation issues.
2422*5c90c05cSAndroid Build Coastguard Worker
2423*5c90c05cSAndroid Build Coastguard Worker# 3.0.1 - 2016-11-01
2424*5c90c05cSAndroid Build Coastguard Worker
2425*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of thousands separator
2426*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/353).
2427*5c90c05cSAndroid Build Coastguard Worker- Fixed handling of `unsigned char` strings
2428*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/373).
2429*5c90c05cSAndroid Build Coastguard Worker- Corrected buffer growth when formatting time
2430*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/367).
2431*5c90c05cSAndroid Build Coastguard Worker- Removed warnings under MSVC and clang
2432*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/318,
2433*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/250, also merged
2434*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/385 and
2435*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/361).
2436*5c90c05cSAndroid Build Coastguard Worker  Thanks @jcelerier and @nmoehrle.
2437*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation issues under Android
2438*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/327,
2439*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/345 and
2440*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/381), FreeBSD
2441*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/358), Cygwin
2442*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/388), MinGW
2443*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/355) as well as other
2444*5c90c05cSAndroid Build Coastguard Worker  issues (https://github.com/fmtlib/fmt/issues/350,
2445*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/355,
2446*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/348,
2447*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/402,
2448*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/405).
2449*5c90c05cSAndroid Build Coastguard Worker  Thanks @dpantele, @hghwng, @arvedarved, @LogicalKnight and @JanHellwig.
2450*5c90c05cSAndroid Build Coastguard Worker- Fixed some documentation issues and extended specification
2451*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/320,
2452*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/333,
2453*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/347,
2454*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/362). Thanks @smellman.
2455*5c90c05cSAndroid Build Coastguard Worker
2456*5c90c05cSAndroid Build Coastguard Worker# 3.0.0 - 2016-05-07
2457*5c90c05cSAndroid Build Coastguard Worker
2458*5c90c05cSAndroid Build Coastguard Worker- The project has been renamed from C++ Format (cppformat) to fmt for
2459*5c90c05cSAndroid Build Coastguard Worker  consistency with the used namespace and macro prefix
2460*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/307). Library headers
2461*5c90c05cSAndroid Build Coastguard Worker  are now located in the `fmt` directory:
2462*5c90c05cSAndroid Build Coastguard Worker
2463*5c90c05cSAndroid Build Coastguard Worker  ```c++
2464*5c90c05cSAndroid Build Coastguard Worker  #include "fmt/format.h"
2465*5c90c05cSAndroid Build Coastguard Worker  ```
2466*5c90c05cSAndroid Build Coastguard Worker
2467*5c90c05cSAndroid Build Coastguard Worker  Including `format.h` from the `cppformat` directory is deprecated
2468*5c90c05cSAndroid Build Coastguard Worker  but works via a proxy header which will be removed in the next major
2469*5c90c05cSAndroid Build Coastguard Worker  version.
2470*5c90c05cSAndroid Build Coastguard Worker
2471*5c90c05cSAndroid Build Coastguard Worker  The documentation is now available at <https://fmt.dev>.
2472*5c90c05cSAndroid Build Coastguard Worker
2473*5c90c05cSAndroid Build Coastguard Worker- Added support for
2474*5c90c05cSAndroid Build Coastguard Worker  [strftime](http://en.cppreference.com/w/cpp/chrono/c/strftime)-like
2475*5c90c05cSAndroid Build Coastguard Worker  [date and time
2476*5c90c05cSAndroid Build Coastguard Worker  formatting](https://fmt.dev/3.0.0/api.html#date-and-time-formatting)
2477*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/283):
2478*5c90c05cSAndroid Build Coastguard Worker
2479*5c90c05cSAndroid Build Coastguard Worker  ```c++
2480*5c90c05cSAndroid Build Coastguard Worker  #include "fmt/time.h"
2481*5c90c05cSAndroid Build Coastguard Worker
2482*5c90c05cSAndroid Build Coastguard Worker  std::time_t t = std::time(nullptr);
2483*5c90c05cSAndroid Build Coastguard Worker  // Prints "The date is 2016-04-29." (with the current date)
2484*5c90c05cSAndroid Build Coastguard Worker  fmt::print("The date is {:%Y-%m-%d}.", *std::localtime(&t));
2485*5c90c05cSAndroid Build Coastguard Worker  ```
2486*5c90c05cSAndroid Build Coastguard Worker
2487*5c90c05cSAndroid Build Coastguard Worker- `std::ostream` support including formatting of user-defined types
2488*5c90c05cSAndroid Build Coastguard Worker  that provide overloaded `operator<<` has been moved to
2489*5c90c05cSAndroid Build Coastguard Worker  `fmt/ostream.h`:
2490*5c90c05cSAndroid Build Coastguard Worker
2491*5c90c05cSAndroid Build Coastguard Worker  ```c++
2492*5c90c05cSAndroid Build Coastguard Worker  #include "fmt/ostream.h"
2493*5c90c05cSAndroid Build Coastguard Worker
2494*5c90c05cSAndroid Build Coastguard Worker  class Date {
2495*5c90c05cSAndroid Build Coastguard Worker    int year_, month_, day_;
2496*5c90c05cSAndroid Build Coastguard Worker  public:
2497*5c90c05cSAndroid Build Coastguard Worker    Date(int year, int month, int day) : year_(year), month_(month), day_(day) {}
2498*5c90c05cSAndroid Build Coastguard Worker
2499*5c90c05cSAndroid Build Coastguard Worker    friend std::ostream &operator<<(std::ostream &os, const Date &d) {
2500*5c90c05cSAndroid Build Coastguard Worker      return os << d.year_ << '-' << d.month_ << '-' << d.day_;
2501*5c90c05cSAndroid Build Coastguard Worker    }
2502*5c90c05cSAndroid Build Coastguard Worker  };
2503*5c90c05cSAndroid Build Coastguard Worker
2504*5c90c05cSAndroid Build Coastguard Worker  std::string s = fmt::format("The date is {}", Date(2012, 12, 9));
2505*5c90c05cSAndroid Build Coastguard Worker  // s == "The date is 2012-12-9"
2506*5c90c05cSAndroid Build Coastguard Worker  ```
2507*5c90c05cSAndroid Build Coastguard Worker
2508*5c90c05cSAndroid Build Coastguard Worker- Added support for [custom argument
2509*5c90c05cSAndroid Build Coastguard Worker  formatters](https://fmt.dev/3.0.0/api.html#argument-formatters)
2510*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/235).
2511*5c90c05cSAndroid Build Coastguard Worker
2512*5c90c05cSAndroid Build Coastguard Worker- Added support for locale-specific integer formatting with the `n`
2513*5c90c05cSAndroid Build Coastguard Worker  specifier (https://github.com/fmtlib/fmt/issues/305):
2514*5c90c05cSAndroid Build Coastguard Worker
2515*5c90c05cSAndroid Build Coastguard Worker  ```c++
2516*5c90c05cSAndroid Build Coastguard Worker  std::setlocale(LC_ALL, "en_US.utf8");
2517*5c90c05cSAndroid Build Coastguard Worker  fmt::print("cppformat: {:n}\n", 1234567); // prints 1,234,567
2518*5c90c05cSAndroid Build Coastguard Worker  ```
2519*5c90c05cSAndroid Build Coastguard Worker
2520*5c90c05cSAndroid Build Coastguard Worker- Sign is now preserved when formatting an integer with an incorrect
2521*5c90c05cSAndroid Build Coastguard Worker  `printf` format specifier
2522*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/265):
2523*5c90c05cSAndroid Build Coastguard Worker
2524*5c90c05cSAndroid Build Coastguard Worker  ```c++
2525*5c90c05cSAndroid Build Coastguard Worker  fmt::printf("%lld", -42); // prints -42
2526*5c90c05cSAndroid Build Coastguard Worker  ```
2527*5c90c05cSAndroid Build Coastguard Worker
2528*5c90c05cSAndroid Build Coastguard Worker  Note that it would be an undefined behavior in `std::printf`.
2529*5c90c05cSAndroid Build Coastguard Worker
2530*5c90c05cSAndroid Build Coastguard Worker- Length modifiers such as `ll` are now optional in printf formatting
2531*5c90c05cSAndroid Build Coastguard Worker  functions and the correct type is determined automatically
2532*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/255):
2533*5c90c05cSAndroid Build Coastguard Worker
2534*5c90c05cSAndroid Build Coastguard Worker  ```c++
2535*5c90c05cSAndroid Build Coastguard Worker  fmt::printf("%d", std::numeric_limits<long long>::max());
2536*5c90c05cSAndroid Build Coastguard Worker  ```
2537*5c90c05cSAndroid Build Coastguard Worker
2538*5c90c05cSAndroid Build Coastguard Worker  Note that it would be an undefined behavior in `std::printf`.
2539*5c90c05cSAndroid Build Coastguard Worker
2540*5c90c05cSAndroid Build Coastguard Worker- Added initial support for custom formatters
2541*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/231).
2542*5c90c05cSAndroid Build Coastguard Worker
2543*5c90c05cSAndroid Build Coastguard Worker- Fixed detection of user-defined literal support on Intel C++
2544*5c90c05cSAndroid Build Coastguard Worker  compiler (https://github.com/fmtlib/fmt/issues/311,
2545*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/312).
2546*5c90c05cSAndroid Build Coastguard Worker  Thanks @dean0x7d and @speth.
2547*5c90c05cSAndroid Build Coastguard Worker
2548*5c90c05cSAndroid Build Coastguard Worker- Reduced compile time
2549*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/243,
2550*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/249,
2551*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/317):
2552*5c90c05cSAndroid Build Coastguard Worker
2553*5c90c05cSAndroid Build Coastguard Worker  ![](https://cloud.githubusercontent.com/assets/4831417/11614060/b9e826d2-9c36-11e5-8666-d4131bf503ef.png)
2554*5c90c05cSAndroid Build Coastguard Worker
2555*5c90c05cSAndroid Build Coastguard Worker  ![](https://cloud.githubusercontent.com/assets/4831417/11614080/6ac903cc-9c37-11e5-8165-26df6efae364.png)
2556*5c90c05cSAndroid Build Coastguard Worker
2557*5c90c05cSAndroid Build Coastguard Worker  Thanks @dean0x7d.
2558*5c90c05cSAndroid Build Coastguard Worker
2559*5c90c05cSAndroid Build Coastguard Worker- Compile test fixes (https://github.com/fmtlib/fmt/pull/313).
2560*5c90c05cSAndroid Build Coastguard Worker  Thanks @dean0x7d.
2561*5c90c05cSAndroid Build Coastguard Worker
2562*5c90c05cSAndroid Build Coastguard Worker- Documentation fixes (https://github.com/fmtlib/fmt/pull/239,
2563*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/248,
2564*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/252,
2565*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/258,
2566*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/260,
2567*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/301,
2568*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/309).
2569*5c90c05cSAndroid Build Coastguard Worker  Thanks @ReadmeCritic @Gachapen and @jwilk.
2570*5c90c05cSAndroid Build Coastguard Worker
2571*5c90c05cSAndroid Build Coastguard Worker- Fixed compiler and sanitizer warnings
2572*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/244,
2573*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/256,
2574*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/259,
2575*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/263,
2576*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/274,
2577*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/277,
2578*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/286,
2579*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/291,
2580*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/296,
2581*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/308).
2582*5c90c05cSAndroid Build Coastguard Worker  Thanks @mwinterb, @pweiskircher and @Naios.
2583*5c90c05cSAndroid Build Coastguard Worker
2584*5c90c05cSAndroid Build Coastguard Worker- Improved compatibility with Windows Store apps
2585*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/280,
2586*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/285) Thanks @mwinterb.
2587*5c90c05cSAndroid Build Coastguard Worker
2588*5c90c05cSAndroid Build Coastguard Worker- Added tests of compatibility with older C++ standards
2589*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/273). Thanks @niosHD.
2590*5c90c05cSAndroid Build Coastguard Worker
2591*5c90c05cSAndroid Build Coastguard Worker- Fixed Android build
2592*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/271). Thanks @newnon.
2593*5c90c05cSAndroid Build Coastguard Worker
2594*5c90c05cSAndroid Build Coastguard Worker- Changed `ArgMap` to be backed by a vector instead of a map.
2595*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/261,
2596*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/262). Thanks @mwinterb.
2597*5c90c05cSAndroid Build Coastguard Worker
2598*5c90c05cSAndroid Build Coastguard Worker- Added `fprintf` overload that writes to a `std::ostream`
2599*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/251).
2600*5c90c05cSAndroid Build Coastguard Worker  Thanks @nickhutchinson.
2601*5c90c05cSAndroid Build Coastguard Worker
2602*5c90c05cSAndroid Build Coastguard Worker- Export symbols when building a Windows DLL
2603*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/245).
2604*5c90c05cSAndroid Build Coastguard Worker  Thanks @macdems.
2605*5c90c05cSAndroid Build Coastguard Worker
2606*5c90c05cSAndroid Build Coastguard Worker- Fixed compilation on Cygwin
2607*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/304).
2608*5c90c05cSAndroid Build Coastguard Worker
2609*5c90c05cSAndroid Build Coastguard Worker- Implemented a workaround for a bug in Apple LLVM version 4.2 of
2610*5c90c05cSAndroid Build Coastguard Worker  clang (https://github.com/fmtlib/fmt/issues/276).
2611*5c90c05cSAndroid Build Coastguard Worker
2612*5c90c05cSAndroid Build Coastguard Worker- Implemented a workaround for Google Test bug
2613*5c90c05cSAndroid Build Coastguard Worker  https://github.com/google/googletest/issues/705 on gcc 6
2614*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/268). Thanks @octoploid.
2615*5c90c05cSAndroid Build Coastguard Worker
2616*5c90c05cSAndroid Build Coastguard Worker- Removed Biicode support because the latter has been discontinued.
2617*5c90c05cSAndroid Build Coastguard Worker
2618*5c90c05cSAndroid Build Coastguard Worker# 2.1.1 - 2016-04-11
2619*5c90c05cSAndroid Build Coastguard Worker
2620*5c90c05cSAndroid Build Coastguard Worker- The install location for generated CMake files is now configurable
2621*5c90c05cSAndroid Build Coastguard Worker  via the `FMT_CMAKE_DIR` CMake variable
2622*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/299). Thanks @niosHD.
2623*5c90c05cSAndroid Build Coastguard Worker- Documentation fixes
2624*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/252).
2625*5c90c05cSAndroid Build Coastguard Worker
2626*5c90c05cSAndroid Build Coastguard Worker# 2.1.0 - 2016-03-21
2627*5c90c05cSAndroid Build Coastguard Worker
2628*5c90c05cSAndroid Build Coastguard Worker- Project layout and build system improvements
2629*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/267):
2630*5c90c05cSAndroid Build Coastguard Worker
2631*5c90c05cSAndroid Build Coastguard Worker  -   The code have been moved to the `cppformat` directory. Including
2632*5c90c05cSAndroid Build Coastguard Worker      `format.h` from the top-level directory is deprecated but works
2633*5c90c05cSAndroid Build Coastguard Worker      via a proxy header which will be removed in the next major
2634*5c90c05cSAndroid Build Coastguard Worker      version.
2635*5c90c05cSAndroid Build Coastguard Worker  -   C++ Format CMake targets now have proper interface definitions.
2636*5c90c05cSAndroid Build Coastguard Worker  -   Installed version of the library now supports the header-only
2637*5c90c05cSAndroid Build Coastguard Worker      configuration.
2638*5c90c05cSAndroid Build Coastguard Worker  -   Targets `doc`, `install`, and `test` are now disabled if C++
2639*5c90c05cSAndroid Build Coastguard Worker      Format is included as a CMake subproject. They can be enabled by
2640*5c90c05cSAndroid Build Coastguard Worker      setting `FMT_DOC`, `FMT_INSTALL`, and `FMT_TEST` in the parent
2641*5c90c05cSAndroid Build Coastguard Worker      project.
2642*5c90c05cSAndroid Build Coastguard Worker
2643*5c90c05cSAndroid Build Coastguard Worker  Thanks @niosHD.
2644*5c90c05cSAndroid Build Coastguard Worker
2645*5c90c05cSAndroid Build Coastguard Worker# 2.0.1 - 2016-03-13
2646*5c90c05cSAndroid Build Coastguard Worker
2647*5c90c05cSAndroid Build Coastguard Worker- Improved CMake find and package support
2648*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/264). Thanks @niosHD.
2649*5c90c05cSAndroid Build Coastguard Worker- Fix compile error with Android NDK and mingw32
2650*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/241). Thanks @Gachapen.
2651*5c90c05cSAndroid Build Coastguard Worker- Documentation fixes
2652*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/248,
2653*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/260).
2654*5c90c05cSAndroid Build Coastguard Worker
2655*5c90c05cSAndroid Build Coastguard Worker# 2.0.0 - 2015-12-01
2656*5c90c05cSAndroid Build Coastguard Worker
2657*5c90c05cSAndroid Build Coastguard Worker## General
2658*5c90c05cSAndroid Build Coastguard Worker
2659*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Named arguments
2660*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/169,
2661*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/173,
2662*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/174):
2663*5c90c05cSAndroid Build Coastguard Worker
2664*5c90c05cSAndroid Build Coastguard Worker  ```c++
2665*5c90c05cSAndroid Build Coastguard Worker  fmt::print("The answer is {answer}.", fmt::arg("answer", 42));
2666*5c90c05cSAndroid Build Coastguard Worker  ```
2667*5c90c05cSAndroid Build Coastguard Worker
2668*5c90c05cSAndroid Build Coastguard Worker  Thanks @jamboree.
2669*5c90c05cSAndroid Build Coastguard Worker
2670*5c90c05cSAndroid Build Coastguard Worker- \[Experimental\] User-defined literals for format and named
2671*5c90c05cSAndroid Build Coastguard Worker  arguments (https://github.com/fmtlib/fmt/pull/204,
2672*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/206,
2673*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/207):
2674*5c90c05cSAndroid Build Coastguard Worker
2675*5c90c05cSAndroid Build Coastguard Worker  ```c++
2676*5c90c05cSAndroid Build Coastguard Worker  using namespace fmt::literals;
2677*5c90c05cSAndroid Build Coastguard Worker  fmt::print("The answer is {answer}.", "answer"_a=42);
2678*5c90c05cSAndroid Build Coastguard Worker  ```
2679*5c90c05cSAndroid Build Coastguard Worker
2680*5c90c05cSAndroid Build Coastguard Worker  Thanks @dean0x7d.
2681*5c90c05cSAndroid Build Coastguard Worker
2682*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Formatting of more than 16 arguments is now supported
2683*5c90c05cSAndroid Build Coastguard Worker  when using variadic templates
2684*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/141). Thanks @Shauren.
2685*5c90c05cSAndroid Build Coastguard Worker
2686*5c90c05cSAndroid Build Coastguard Worker- Runtime width specification
2687*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/168):
2688*5c90c05cSAndroid Build Coastguard Worker
2689*5c90c05cSAndroid Build Coastguard Worker  ```c++
2690*5c90c05cSAndroid Build Coastguard Worker  fmt::format("{0:{1}}", 42, 5); // gives "   42"
2691*5c90c05cSAndroid Build Coastguard Worker  ```
2692*5c90c05cSAndroid Build Coastguard Worker
2693*5c90c05cSAndroid Build Coastguard Worker  Thanks @jamboree.
2694*5c90c05cSAndroid Build Coastguard Worker
2695*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Enums are now formatted with an overloaded
2696*5c90c05cSAndroid Build Coastguard Worker  `std::ostream` insertion operator (`operator<<`) if available
2697*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/232).
2698*5c90c05cSAndroid Build Coastguard Worker
2699*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Changed default `bool` format to textual, \"true\" or
2700*5c90c05cSAndroid Build Coastguard Worker  \"false\" (https://github.com/fmtlib/fmt/issues/170):
2701*5c90c05cSAndroid Build Coastguard Worker
2702*5c90c05cSAndroid Build Coastguard Worker  ```c++
2703*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{}", true); // prints "true"
2704*5c90c05cSAndroid Build Coastguard Worker  ```
2705*5c90c05cSAndroid Build Coastguard Worker
2706*5c90c05cSAndroid Build Coastguard Worker  To print `bool` as a number use numeric format specifier such as
2707*5c90c05cSAndroid Build Coastguard Worker  `d`:
2708*5c90c05cSAndroid Build Coastguard Worker
2709*5c90c05cSAndroid Build Coastguard Worker  ```c++
2710*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{:d}", true); // prints "1"
2711*5c90c05cSAndroid Build Coastguard Worker  ```
2712*5c90c05cSAndroid Build Coastguard Worker
2713*5c90c05cSAndroid Build Coastguard Worker- `fmt::printf` and `fmt::sprintf` now support formatting of `bool`
2714*5c90c05cSAndroid Build Coastguard Worker  with the `%s` specifier giving textual output, \"true\" or \"false\"
2715*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/223):
2716*5c90c05cSAndroid Build Coastguard Worker
2717*5c90c05cSAndroid Build Coastguard Worker  ```c++
2718*5c90c05cSAndroid Build Coastguard Worker  fmt::printf("%s", true); // prints "true"
2719*5c90c05cSAndroid Build Coastguard Worker  ```
2720*5c90c05cSAndroid Build Coastguard Worker
2721*5c90c05cSAndroid Build Coastguard Worker  Thanks @LarsGullik.
2722*5c90c05cSAndroid Build Coastguard Worker
2723*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] `signed char` and `unsigned char` are now formatted as
2724*5c90c05cSAndroid Build Coastguard Worker  integers by default
2725*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/217).
2726*5c90c05cSAndroid Build Coastguard Worker
2727*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Pointers to C strings can now be formatted with the `p`
2728*5c90c05cSAndroid Build Coastguard Worker  specifier (https://github.com/fmtlib/fmt/pull/223):
2729*5c90c05cSAndroid Build Coastguard Worker
2730*5c90c05cSAndroid Build Coastguard Worker  ```c++
2731*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{:p}", "test"); // prints pointer value
2732*5c90c05cSAndroid Build Coastguard Worker  ```
2733*5c90c05cSAndroid Build Coastguard Worker
2734*5c90c05cSAndroid Build Coastguard Worker  Thanks @LarsGullik.
2735*5c90c05cSAndroid Build Coastguard Worker
2736*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] `fmt::printf` and `fmt::sprintf` now print null
2737*5c90c05cSAndroid Build Coastguard Worker  pointers as `(nil)` and null strings as `(null)` for consistency
2738*5c90c05cSAndroid Build Coastguard Worker  with glibc (https://github.com/fmtlib/fmt/pull/226).
2739*5c90c05cSAndroid Build Coastguard Worker  Thanks @LarsGullik.
2740*5c90c05cSAndroid Build Coastguard Worker
2741*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] `fmt::(s)printf` now supports formatting of objects of
2742*5c90c05cSAndroid Build Coastguard Worker  user-defined types that provide an overloaded `std::ostream`
2743*5c90c05cSAndroid Build Coastguard Worker  insertion operator (`operator<<`)
2744*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/201):
2745*5c90c05cSAndroid Build Coastguard Worker
2746*5c90c05cSAndroid Build Coastguard Worker  ```c++
2747*5c90c05cSAndroid Build Coastguard Worker  fmt::printf("The date is %s", Date(2012, 12, 9));
2748*5c90c05cSAndroid Build Coastguard Worker  ```
2749*5c90c05cSAndroid Build Coastguard Worker
2750*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] The `Buffer` template is now part of the public API and
2751*5c90c05cSAndroid Build Coastguard Worker  can be used to implement custom memory buffers
2752*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/140). Thanks @polyvertex.
2753*5c90c05cSAndroid Build Coastguard Worker
2754*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Improved compatibility between `BasicStringRef` and
2755*5c90c05cSAndroid Build Coastguard Worker  [std::experimental::basic_string_view](
2756*5c90c05cSAndroid Build Coastguard Worker  http://en.cppreference.com/w/cpp/experimental/basic_string_view)
2757*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/100,
2758*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/159,
2759*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/183):
2760*5c90c05cSAndroid Build Coastguard Worker
2761*5c90c05cSAndroid Build Coastguard Worker  -   Comparison operators now compare string content, not pointers
2762*5c90c05cSAndroid Build Coastguard Worker  -   `BasicStringRef::c_str` replaced by `BasicStringRef::data`
2763*5c90c05cSAndroid Build Coastguard Worker  -   `BasicStringRef` is no longer assumed to be null-terminated
2764*5c90c05cSAndroid Build Coastguard Worker
2765*5c90c05cSAndroid Build Coastguard Worker  References to null-terminated strings are now represented by a new
2766*5c90c05cSAndroid Build Coastguard Worker  class, `BasicCStringRef`.
2767*5c90c05cSAndroid Build Coastguard Worker
2768*5c90c05cSAndroid Build Coastguard Worker- Dependency on pthreads introduced by Google Test is now optional
2769*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/185).
2770*5c90c05cSAndroid Build Coastguard Worker
2771*5c90c05cSAndroid Build Coastguard Worker- New CMake options `FMT_DOC`, `FMT_INSTALL` and `FMT_TEST` to control
2772*5c90c05cSAndroid Build Coastguard Worker  generation of `doc`, `install` and `test` targets respectively, on
2773*5c90c05cSAndroid Build Coastguard Worker  by default (https://github.com/fmtlib/fmt/issues/197,
2774*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/198,
2775*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/200). Thanks @maddinat0r.
2776*5c90c05cSAndroid Build Coastguard Worker
2777*5c90c05cSAndroid Build Coastguard Worker- `noexcept` is now used when compiling with MSVC2015
2778*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/215). Thanks @dmkrepo.
2779*5c90c05cSAndroid Build Coastguard Worker
2780*5c90c05cSAndroid Build Coastguard Worker- Added an option to disable use of `windows.h` when
2781*5c90c05cSAndroid Build Coastguard Worker  `FMT_USE_WINDOWS_H` is defined as 0 before including `format.h`
2782*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/171). Thanks @alfps.
2783*5c90c05cSAndroid Build Coastguard Worker
2784*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] `windows.h` is now included with `NOMINMAX` unless
2785*5c90c05cSAndroid Build Coastguard Worker  `FMT_WIN_MINMAX` is defined. This is done to prevent breaking code
2786*5c90c05cSAndroid Build Coastguard Worker  using `std::min` and `std::max` and only affects the header-only
2787*5c90c05cSAndroid Build Coastguard Worker  configuration (https://github.com/fmtlib/fmt/issues/152,
2788*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/153,
2789*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/154). Thanks @DevO2012.
2790*5c90c05cSAndroid Build Coastguard Worker
2791*5c90c05cSAndroid Build Coastguard Worker- Improved support for custom character types
2792*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/171). Thanks @alfps.
2793*5c90c05cSAndroid Build Coastguard Worker
2794*5c90c05cSAndroid Build Coastguard Worker- Added an option to disable use of IOStreams when `FMT_USE_IOSTREAMS`
2795*5c90c05cSAndroid Build Coastguard Worker  is defined as 0 before including `format.h`
2796*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/205,
2797*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/208). Thanks @JodiTheTigger.
2798*5c90c05cSAndroid Build Coastguard Worker
2799*5c90c05cSAndroid Build Coastguard Worker- Improved detection of `isnan`, `isinf` and `signbit`.
2800*5c90c05cSAndroid Build Coastguard Worker
2801*5c90c05cSAndroid Build Coastguard Worker## Optimization
2802*5c90c05cSAndroid Build Coastguard Worker
2803*5c90c05cSAndroid Build Coastguard Worker- Made formatting of user-defined types more efficient with a custom
2804*5c90c05cSAndroid Build Coastguard Worker  stream buffer (https://github.com/fmtlib/fmt/issues/92,
2805*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/230). Thanks @NotImplemented.
2806*5c90c05cSAndroid Build Coastguard Worker- Further improved performance of `fmt::Writer` on integer formatting
2807*5c90c05cSAndroid Build Coastguard Worker  and fixed a minor regression. Now it is \~7% faster than
2808*5c90c05cSAndroid Build Coastguard Worker  `karma::generate` on Karma\'s benchmark
2809*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/186).
2810*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Reduced [compiled code
2811*5c90c05cSAndroid Build Coastguard Worker  size](https://github.com/fmtlib/fmt#compile-time-and-code-bloat)
2812*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/143,
2813*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/149).
2814*5c90c05cSAndroid Build Coastguard Worker
2815*5c90c05cSAndroid Build Coastguard Worker## Distribution
2816*5c90c05cSAndroid Build Coastguard Worker
2817*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Headers are now installed in
2818*5c90c05cSAndroid Build Coastguard Worker  `${CMAKE_INSTALL_PREFIX}/include/cppformat`
2819*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/178). Thanks @jackyf.
2820*5c90c05cSAndroid Build Coastguard Worker
2821*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Changed the library name from `format` to `cppformat`
2822*5c90c05cSAndroid Build Coastguard Worker  for consistency with the project name and to avoid potential
2823*5c90c05cSAndroid Build Coastguard Worker  conflicts (https://github.com/fmtlib/fmt/issues/178).
2824*5c90c05cSAndroid Build Coastguard Worker  Thanks @jackyf.
2825*5c90c05cSAndroid Build Coastguard Worker
2826*5c90c05cSAndroid Build Coastguard Worker- C++ Format is now available in [Debian](https://www.debian.org/)
2827*5c90c05cSAndroid Build Coastguard Worker  GNU/Linux
2828*5c90c05cSAndroid Build Coastguard Worker  ([stretch](https://packages.debian.org/source/stretch/cppformat),
2829*5c90c05cSAndroid Build Coastguard Worker  [sid](https://packages.debian.org/source/sid/cppformat)) and derived
2830*5c90c05cSAndroid Build Coastguard Worker  distributions such as
2831*5c90c05cSAndroid Build Coastguard Worker  [Ubuntu](https://launchpad.net/ubuntu/+source/cppformat) 15.10 and
2832*5c90c05cSAndroid Build Coastguard Worker  later (https://github.com/fmtlib/fmt/issues/155):
2833*5c90c05cSAndroid Build Coastguard Worker
2834*5c90c05cSAndroid Build Coastguard Worker      $ sudo apt-get install libcppformat1-dev
2835*5c90c05cSAndroid Build Coastguard Worker
2836*5c90c05cSAndroid Build Coastguard Worker  Thanks @jackyf.
2837*5c90c05cSAndroid Build Coastguard Worker
2838*5c90c05cSAndroid Build Coastguard Worker- [Packages for Fedora and
2839*5c90c05cSAndroid Build Coastguard Worker  RHEL](https://admin.fedoraproject.org/pkgdb/package/cppformat/) are
2840*5c90c05cSAndroid Build Coastguard Worker  now available. Thanks Dave Johansen.
2841*5c90c05cSAndroid Build Coastguard Worker
2842*5c90c05cSAndroid Build Coastguard Worker- C++ Format can now be installed via [Homebrew](http://brew.sh/) on
2843*5c90c05cSAndroid Build Coastguard Worker  OS X (https://github.com/fmtlib/fmt/issues/157):
2844*5c90c05cSAndroid Build Coastguard Worker
2845*5c90c05cSAndroid Build Coastguard Worker      $ brew install cppformat
2846*5c90c05cSAndroid Build Coastguard Worker
2847*5c90c05cSAndroid Build Coastguard Worker  Thanks @ortho and Anatoliy Bulukin.
2848*5c90c05cSAndroid Build Coastguard Worker
2849*5c90c05cSAndroid Build Coastguard Worker## Documentation
2850*5c90c05cSAndroid Build Coastguard Worker
2851*5c90c05cSAndroid Build Coastguard Worker- Migrated from ReadTheDocs to GitHub Pages for better responsiveness
2852*5c90c05cSAndroid Build Coastguard Worker  and reliability (https://github.com/fmtlib/fmt/issues/128).
2853*5c90c05cSAndroid Build Coastguard Worker  New documentation address is <http://cppformat.github.io/>.
2854*5c90c05cSAndroid Build Coastguard Worker- Added [Building thedocumentation](
2855*5c90c05cSAndroid Build Coastguard Worker  https://fmt.dev/2.0.0/usage.html#building-the-documentation)
2856*5c90c05cSAndroid Build Coastguard Worker  section to the documentation.
2857*5c90c05cSAndroid Build Coastguard Worker- Documentation build script is now compatible with Python 3 and newer
2858*5c90c05cSAndroid Build Coastguard Worker  pip versions. (https://github.com/fmtlib/fmt/pull/189,
2859*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/209).
2860*5c90c05cSAndroid Build Coastguard Worker  Thanks @JodiTheTigger and @xentec.
2861*5c90c05cSAndroid Build Coastguard Worker- Documentation fixes and improvements
2862*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/36,
2863*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/75,
2864*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/125,
2865*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/160,
2866*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/161,
2867*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/162,
2868*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/165,
2869*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/210).
2870*5c90c05cSAndroid Build Coastguard Worker  Thanks @syohex.
2871*5c90c05cSAndroid Build Coastguard Worker- Fixed out-of-tree documentation build
2872*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/177). Thanks @jackyf.
2873*5c90c05cSAndroid Build Coastguard Worker
2874*5c90c05cSAndroid Build Coastguard Worker## Fixes
2875*5c90c05cSAndroid Build Coastguard Worker
2876*5c90c05cSAndroid Build Coastguard Worker- Fixed `initializer_list` detection
2877*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/136). Thanks @Gachapen.
2878*5c90c05cSAndroid Build Coastguard Worker
2879*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Fixed formatting of enums with numeric format
2880*5c90c05cSAndroid Build Coastguard Worker  specifiers in `fmt::(s)printf`
2881*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/131,
2882*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/139):
2883*5c90c05cSAndroid Build Coastguard Worker
2884*5c90c05cSAndroid Build Coastguard Worker  ```c++
2885*5c90c05cSAndroid Build Coastguard Worker  enum { ANSWER = 42 };
2886*5c90c05cSAndroid Build Coastguard Worker  fmt::printf("%d", ANSWER);
2887*5c90c05cSAndroid Build Coastguard Worker  ```
2888*5c90c05cSAndroid Build Coastguard Worker
2889*5c90c05cSAndroid Build Coastguard Worker  Thanks @Naios.
2890*5c90c05cSAndroid Build Coastguard Worker
2891*5c90c05cSAndroid Build Coastguard Worker- Improved compatibility with old versions of MinGW
2892*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/129,
2893*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/130,
2894*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/132). Thanks @cstamford.
2895*5c90c05cSAndroid Build Coastguard Worker
2896*5c90c05cSAndroid Build Coastguard Worker- Fixed a compile error on MSVC with disabled exceptions
2897*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/144).
2898*5c90c05cSAndroid Build Coastguard Worker
2899*5c90c05cSAndroid Build Coastguard Worker- Added a workaround for broken implementation of variadic templates
2900*5c90c05cSAndroid Build Coastguard Worker  in MSVC2012 (https://github.com/fmtlib/fmt/issues/148).
2901*5c90c05cSAndroid Build Coastguard Worker
2902*5c90c05cSAndroid Build Coastguard Worker- Placed the anonymous namespace within `fmt` namespace for the
2903*5c90c05cSAndroid Build Coastguard Worker  header-only configuration (https://github.com/fmtlib/fmt/issues/171).
2904*5c90c05cSAndroid Build Coastguard Worker  Thanks @alfps.
2905*5c90c05cSAndroid Build Coastguard Worker
2906*5c90c05cSAndroid Build Coastguard Worker- Fixed issues reported by Coverity Scan
2907*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/187,
2908*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/192).
2909*5c90c05cSAndroid Build Coastguard Worker
2910*5c90c05cSAndroid Build Coastguard Worker- Implemented a workaround for a name lookup bug in MSVC2010
2911*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/188).
2912*5c90c05cSAndroid Build Coastguard Worker
2913*5c90c05cSAndroid Build Coastguard Worker- Fixed compiler warnings
2914*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/95,
2915*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/96,
2916*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/114,
2917*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/135,
2918*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/142,
2919*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/145,
2920*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/146,
2921*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/158,
2922*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/163,
2923*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/175,
2924*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/190,
2925*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/191,
2926*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/194,
2927*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/196,
2928*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/216,
2929*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/218,
2930*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/220,
2931*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/229,
2932*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/233,
2933*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/234,
2934*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/236,
2935*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/281,
2936*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/289).
2937*5c90c05cSAndroid Build Coastguard Worker  Thanks @seanmiddleditch, @dixlorenz, @CarterLi, @Naios, @fmatthew5876,
2938*5c90c05cSAndroid Build Coastguard Worker  @LevskiWeng, @rpopescu, @gabime, @cubicool, @jkflying, @LogicalKnight,
2939*5c90c05cSAndroid Build Coastguard Worker  @inguin and @Jopie64.
2940*5c90c05cSAndroid Build Coastguard Worker
2941*5c90c05cSAndroid Build Coastguard Worker- Fixed portability issues (mostly causing test failures) on ARM,
2942*5c90c05cSAndroid Build Coastguard Worker  ppc64, ppc64le, s390x and SunOS 5.11 i386
2943*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/138,
2944*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/179,
2945*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/180,
2946*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/202,
2947*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/225, [Red Hat Bugzilla
2948*5c90c05cSAndroid Build Coastguard Worker  Bug 1260297](https://bugzilla.redhat.com/show_bug.cgi?id=1260297)).
2949*5c90c05cSAndroid Build Coastguard Worker  Thanks @Naios, @jackyf and Dave Johansen.
2950*5c90c05cSAndroid Build Coastguard Worker
2951*5c90c05cSAndroid Build Coastguard Worker- Fixed a name conflict with macro `free` defined in `crtdbg.h` when
2952*5c90c05cSAndroid Build Coastguard Worker  `_CRTDBG_MAP_ALLOC` is set (https://github.com/fmtlib/fmt/issues/211).
2953*5c90c05cSAndroid Build Coastguard Worker
2954*5c90c05cSAndroid Build Coastguard Worker- Fixed shared library build on OS X
2955*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/212). Thanks @dean0x7d.
2956*5c90c05cSAndroid Build Coastguard Worker
2957*5c90c05cSAndroid Build Coastguard Worker- Fixed an overload conflict on MSVC when `/Zc:wchar_t-` option is
2958*5c90c05cSAndroid Build Coastguard Worker  specified (https://github.com/fmtlib/fmt/pull/214).
2959*5c90c05cSAndroid Build Coastguard Worker  Thanks @slavanap.
2960*5c90c05cSAndroid Build Coastguard Worker
2961*5c90c05cSAndroid Build Coastguard Worker- Improved compatibility with MSVC 2008
2962*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/236). Thanks @Jopie64.
2963*5c90c05cSAndroid Build Coastguard Worker
2964*5c90c05cSAndroid Build Coastguard Worker- Improved compatibility with bcc32
2965*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/227).
2966*5c90c05cSAndroid Build Coastguard Worker
2967*5c90c05cSAndroid Build Coastguard Worker- Fixed `static_assert` detection on Clang
2968*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/228). Thanks @dean0x7d.
2969*5c90c05cSAndroid Build Coastguard Worker
2970*5c90c05cSAndroid Build Coastguard Worker# 1.1.0 - 2015-03-06
2971*5c90c05cSAndroid Build Coastguard Worker
2972*5c90c05cSAndroid Build Coastguard Worker- Added `BasicArrayWriter`, a class template that provides operations
2973*5c90c05cSAndroid Build Coastguard Worker  for formatting and writing data into a fixed-size array
2974*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/105 and
2975*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/122):
2976*5c90c05cSAndroid Build Coastguard Worker
2977*5c90c05cSAndroid Build Coastguard Worker  ```c++
2978*5c90c05cSAndroid Build Coastguard Worker  char buffer[100];
2979*5c90c05cSAndroid Build Coastguard Worker  fmt::ArrayWriter w(buffer);
2980*5c90c05cSAndroid Build Coastguard Worker  w.write("The answer is {}", 42);
2981*5c90c05cSAndroid Build Coastguard Worker  ```
2982*5c90c05cSAndroid Build Coastguard Worker
2983*5c90c05cSAndroid Build Coastguard Worker- Added [0 A.D.](http://play0ad.com/) and [PenUltima Online
2984*5c90c05cSAndroid Build Coastguard Worker  (POL)](http://www.polserver.com/) to the list of notable projects
2985*5c90c05cSAndroid Build Coastguard Worker  using C++ Format.
2986*5c90c05cSAndroid Build Coastguard Worker
2987*5c90c05cSAndroid Build Coastguard Worker- C++ Format now uses MSVC intrinsics for better formatting performance
2988*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/115,
2989*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/116,
2990*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/118 and
2991*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/121). Previously these
2992*5c90c05cSAndroid Build Coastguard Worker  optimizations where only used on GCC and Clang.
2993*5c90c05cSAndroid Build Coastguard Worker  Thanks @CarterLi and @objectx.
2994*5c90c05cSAndroid Build Coastguard Worker
2995*5c90c05cSAndroid Build Coastguard Worker- CMake install target
2996*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/119). Thanks @TrentHouliston.
2997*5c90c05cSAndroid Build Coastguard Worker
2998*5c90c05cSAndroid Build Coastguard Worker  You can now install C++ Format with `make install` command.
2999*5c90c05cSAndroid Build Coastguard Worker
3000*5c90c05cSAndroid Build Coastguard Worker- Improved [Biicode](http://www.biicode.com/) support
3001*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/98 and
3002*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/104).
3003*5c90c05cSAndroid Build Coastguard Worker  Thanks @MariadeAnton and @franramirez688.
3004*5c90c05cSAndroid Build Coastguard Worker
3005*5c90c05cSAndroid Build Coastguard Worker- Improved support for building with [Android NDK](
3006*5c90c05cSAndroid Build Coastguard Worker  https://developer.android.com/tools/sdk/ndk/index.html)
3007*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/107). Thanks @newnon.
3008*5c90c05cSAndroid Build Coastguard Worker
3009*5c90c05cSAndroid Build Coastguard Worker  The [android-ndk-example](https://github.com/fmtlib/android-ndk-example)
3010*5c90c05cSAndroid Build Coastguard Worker  repository provides and example of using C++ Format with Android NDK:
3011*5c90c05cSAndroid Build Coastguard Worker
3012*5c90c05cSAndroid Build Coastguard Worker  ![](https://raw.githubusercontent.com/fmtlib/android-ndk-example/master/screenshot.png)
3013*5c90c05cSAndroid Build Coastguard Worker
3014*5c90c05cSAndroid Build Coastguard Worker- Improved documentation of `SystemError` and `WindowsError`
3015*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/54).
3016*5c90c05cSAndroid Build Coastguard Worker
3017*5c90c05cSAndroid Build Coastguard Worker- Various code improvements
3018*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/pull/110,
3019*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/111
3020*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/pull/112). Thanks @CarterLi.
3021*5c90c05cSAndroid Build Coastguard Worker
3022*5c90c05cSAndroid Build Coastguard Worker- Improved compile-time errors when formatting wide into narrow
3023*5c90c05cSAndroid Build Coastguard Worker  strings (https://github.com/fmtlib/fmt/issues/117).
3024*5c90c05cSAndroid Build Coastguard Worker
3025*5c90c05cSAndroid Build Coastguard Worker- Fixed `BasicWriter::write` without formatting arguments when C++11
3026*5c90c05cSAndroid Build Coastguard Worker  support is disabled
3027*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/109).
3028*5c90c05cSAndroid Build Coastguard Worker
3029*5c90c05cSAndroid Build Coastguard Worker- Fixed header-only build on OS X with GCC 4.9
3030*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/124).
3031*5c90c05cSAndroid Build Coastguard Worker
3032*5c90c05cSAndroid Build Coastguard Worker- Fixed packaging issues (https://github.com/fmtlib/fmt/issues/94).
3033*5c90c05cSAndroid Build Coastguard Worker
3034*5c90c05cSAndroid Build Coastguard Worker- Added [changelog](https://github.com/fmtlib/fmt/blob/master/ChangeLog.md)
3035*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/103).
3036*5c90c05cSAndroid Build Coastguard Worker
3037*5c90c05cSAndroid Build Coastguard Worker# 1.0.0 - 2015-02-05
3038*5c90c05cSAndroid Build Coastguard Worker
3039*5c90c05cSAndroid Build Coastguard Worker- Add support for a header-only configuration when `FMT_HEADER_ONLY`
3040*5c90c05cSAndroid Build Coastguard Worker  is defined before including `format.h`:
3041*5c90c05cSAndroid Build Coastguard Worker
3042*5c90c05cSAndroid Build Coastguard Worker  ```c++
3043*5c90c05cSAndroid Build Coastguard Worker  #define FMT_HEADER_ONLY
3044*5c90c05cSAndroid Build Coastguard Worker  #include "format.h"
3045*5c90c05cSAndroid Build Coastguard Worker  ```
3046*5c90c05cSAndroid Build Coastguard Worker
3047*5c90c05cSAndroid Build Coastguard Worker- Compute string length in the constructor of `BasicStringRef` instead
3048*5c90c05cSAndroid Build Coastguard Worker  of the `size` method
3049*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/79). This eliminates
3050*5c90c05cSAndroid Build Coastguard Worker  size computation for string literals on reasonable optimizing
3051*5c90c05cSAndroid Build Coastguard Worker  compilers.
3052*5c90c05cSAndroid Build Coastguard Worker
3053*5c90c05cSAndroid Build Coastguard Worker- Fix formatting of types with overloaded `operator <<` for
3054*5c90c05cSAndroid Build Coastguard Worker  `std::wostream` (https://github.com/fmtlib/fmt/issues/86):
3055*5c90c05cSAndroid Build Coastguard Worker
3056*5c90c05cSAndroid Build Coastguard Worker  ```c++
3057*5c90c05cSAndroid Build Coastguard Worker  fmt::format(L"The date is {0}", Date(2012, 12, 9));
3058*5c90c05cSAndroid Build Coastguard Worker  ```
3059*5c90c05cSAndroid Build Coastguard Worker
3060*5c90c05cSAndroid Build Coastguard Worker- Fix linkage of tests on Arch Linux
3061*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/89).
3062*5c90c05cSAndroid Build Coastguard Worker
3063*5c90c05cSAndroid Build Coastguard Worker- Allow precision specifier for non-float arguments
3064*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/90):
3065*5c90c05cSAndroid Build Coastguard Worker
3066*5c90c05cSAndroid Build Coastguard Worker  ```c++
3067*5c90c05cSAndroid Build Coastguard Worker  fmt::print("{:.3}\n", "Carpet"); // prints "Car"
3068*5c90c05cSAndroid Build Coastguard Worker  ```
3069*5c90c05cSAndroid Build Coastguard Worker
3070*5c90c05cSAndroid Build Coastguard Worker- Fix build on Android NDK (https://github.com/fmtlib/fmt/issues/93).
3071*5c90c05cSAndroid Build Coastguard Worker
3072*5c90c05cSAndroid Build Coastguard Worker- Improvements to documentation build procedure.
3073*5c90c05cSAndroid Build Coastguard Worker
3074*5c90c05cSAndroid Build Coastguard Worker- Remove `FMT_SHARED` CMake variable in favor of standard [BUILD_SHARED_LIBS](
3075*5c90c05cSAndroid Build Coastguard Worker  http://www.cmake.org/cmake/help/v3.0/variable/BUILD_SHARED_LIBS.html).
3076*5c90c05cSAndroid Build Coastguard Worker
3077*5c90c05cSAndroid Build Coastguard Worker- Fix error handling in `fmt::fprintf`.
3078*5c90c05cSAndroid Build Coastguard Worker
3079*5c90c05cSAndroid Build Coastguard Worker- Fix a number of warnings.
3080*5c90c05cSAndroid Build Coastguard Worker
3081*5c90c05cSAndroid Build Coastguard Worker# 0.12.0 - 2014-10-25
3082*5c90c05cSAndroid Build Coastguard Worker
3083*5c90c05cSAndroid Build Coastguard Worker- \[Breaking\] Improved separation between formatting and buffer
3084*5c90c05cSAndroid Build Coastguard Worker  management. `Writer` is now a base class that cannot be instantiated
3085*5c90c05cSAndroid Build Coastguard Worker  directly. The new `MemoryWriter` class implements the default buffer
3086*5c90c05cSAndroid Build Coastguard Worker  management with small allocations done on stack. So `fmt::Writer`
3087*5c90c05cSAndroid Build Coastguard Worker  should be replaced with `fmt::MemoryWriter` in variable
3088*5c90c05cSAndroid Build Coastguard Worker  declarations.
3089*5c90c05cSAndroid Build Coastguard Worker
3090*5c90c05cSAndroid Build Coastguard Worker  Old code:
3091*5c90c05cSAndroid Build Coastguard Worker
3092*5c90c05cSAndroid Build Coastguard Worker  ```c++
3093*5c90c05cSAndroid Build Coastguard Worker  fmt::Writer w;
3094*5c90c05cSAndroid Build Coastguard Worker  ```
3095*5c90c05cSAndroid Build Coastguard Worker
3096*5c90c05cSAndroid Build Coastguard Worker  New code:
3097*5c90c05cSAndroid Build Coastguard Worker
3098*5c90c05cSAndroid Build Coastguard Worker  ```c++
3099*5c90c05cSAndroid Build Coastguard Worker  fmt::MemoryWriter w;
3100*5c90c05cSAndroid Build Coastguard Worker  ```
3101*5c90c05cSAndroid Build Coastguard Worker
3102*5c90c05cSAndroid Build Coastguard Worker  If you pass `fmt::Writer` by reference, you can continue to do so:
3103*5c90c05cSAndroid Build Coastguard Worker
3104*5c90c05cSAndroid Build Coastguard Worker  ```c++
3105*5c90c05cSAndroid Build Coastguard Worker  void f(fmt::Writer &w);
3106*5c90c05cSAndroid Build Coastguard Worker  ```
3107*5c90c05cSAndroid Build Coastguard Worker
3108*5c90c05cSAndroid Build Coastguard Worker  This doesn\'t affect the formatting API.
3109*5c90c05cSAndroid Build Coastguard Worker
3110*5c90c05cSAndroid Build Coastguard Worker- Support for custom memory allocators
3111*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/69)
3112*5c90c05cSAndroid Build Coastguard Worker
3113*5c90c05cSAndroid Build Coastguard Worker- Formatting functions now accept [signed char]{.title-ref} and
3114*5c90c05cSAndroid Build Coastguard Worker  [unsigned char]{.title-ref} strings as arguments
3115*5c90c05cSAndroid Build Coastguard Worker  (https://github.com/fmtlib/fmt/issues/73):
3116*5c90c05cSAndroid Build Coastguard Worker
3117*5c90c05cSAndroid Build Coastguard Worker  ```c++
3118*5c90c05cSAndroid Build Coastguard Worker  auto s = format("GLSL version: {}", glGetString(GL_VERSION));
3119*5c90c05cSAndroid Build Coastguard Worker  ```
3120*5c90c05cSAndroid Build Coastguard Worker
3121*5c90c05cSAndroid Build Coastguard Worker- Reduced code bloat. According to the new [benchmark
3122*5c90c05cSAndroid Build Coastguard Worker  results](https://github.com/fmtlib/fmt#compile-time-and-code-bloat),
3123*5c90c05cSAndroid Build Coastguard Worker  cppformat is close to `printf` and by the order of magnitude better
3124*5c90c05cSAndroid Build Coastguard Worker  than Boost Format in terms of compiled code size.
3125*5c90c05cSAndroid Build Coastguard Worker
3126*5c90c05cSAndroid Build Coastguard Worker- Improved appearance of the documentation on mobile by using the
3127*5c90c05cSAndroid Build Coastguard Worker  [Sphinx Bootstrap
3128*5c90c05cSAndroid Build Coastguard Worker  theme](http://ryan-roemer.github.io/sphinx-bootstrap-theme/):
3129*5c90c05cSAndroid Build Coastguard Worker
3130*5c90c05cSAndroid Build Coastguard Worker  | Old | New |
3131*5c90c05cSAndroid Build Coastguard Worker  | --- | --- |
3132*5c90c05cSAndroid Build Coastguard Worker  | ![](https://cloud.githubusercontent.com/assets/576385/4792130/cd256436-5de3-11e4-9a62-c077d0c2b003.png) | ![](https://cloud.githubusercontent.com/assets/576385/4792131/cd29896c-5de3-11e4-8f59-cac952942bf0.png) |
3133*5c90c05cSAndroid Build Coastguard Worker
3134*5c90c05cSAndroid Build Coastguard Worker# 0.11.0 - 2014-08-21
3135*5c90c05cSAndroid Build Coastguard Worker
3136*5c90c05cSAndroid Build Coastguard Worker- Safe printf implementation with a POSIX extension for positional
3137*5c90c05cSAndroid Build Coastguard Worker  arguments:
3138*5c90c05cSAndroid Build Coastguard Worker
3139*5c90c05cSAndroid Build Coastguard Worker  ```c++
3140*5c90c05cSAndroid Build Coastguard Worker  fmt::printf("Elapsed time: %.2f seconds", 1.23);
3141*5c90c05cSAndroid Build Coastguard Worker  fmt::printf("%1$s, %3$d %2$s", weekday, month, day);
3142*5c90c05cSAndroid Build Coastguard Worker  ```
3143*5c90c05cSAndroid Build Coastguard Worker
3144*5c90c05cSAndroid Build Coastguard Worker- Arguments of `char` type can now be formatted as integers (Issue
3145*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/55):
3146*5c90c05cSAndroid Build Coastguard Worker
3147*5c90c05cSAndroid Build Coastguard Worker  ```c++
3148*5c90c05cSAndroid Build Coastguard Worker  fmt::format("0x{0:02X}", 'a');
3149*5c90c05cSAndroid Build Coastguard Worker  ```
3150*5c90c05cSAndroid Build Coastguard Worker
3151*5c90c05cSAndroid Build Coastguard Worker- Deprecated parts of the API removed.
3152*5c90c05cSAndroid Build Coastguard Worker
3153*5c90c05cSAndroid Build Coastguard Worker- The library is now built and tested on MinGW with Appveyor in
3154*5c90c05cSAndroid Build Coastguard Worker  addition to existing test platforms Linux/GCC, OS X/Clang,
3155*5c90c05cSAndroid Build Coastguard Worker  Windows/MSVC.
3156*5c90c05cSAndroid Build Coastguard Worker
3157*5c90c05cSAndroid Build Coastguard Worker# 0.10.0 - 2014-07-01
3158*5c90c05cSAndroid Build Coastguard Worker
3159*5c90c05cSAndroid Build Coastguard Worker**Improved API**
3160*5c90c05cSAndroid Build Coastguard Worker
3161*5c90c05cSAndroid Build Coastguard Worker- All formatting methods are now implemented as variadic functions
3162*5c90c05cSAndroid Build Coastguard Worker  instead of using `operator<<` for feeding arbitrary arguments into a
3163*5c90c05cSAndroid Build Coastguard Worker  temporary formatter object. This works both with C++11 where
3164*5c90c05cSAndroid Build Coastguard Worker  variadic templates are used and with older standards where variadic
3165*5c90c05cSAndroid Build Coastguard Worker  functions are emulated by providing lightweight wrapper functions
3166*5c90c05cSAndroid Build Coastguard Worker  defined with the `FMT_VARIADIC` macro. You can use this macro for
3167*5c90c05cSAndroid Build Coastguard Worker  defining your own portable variadic functions:
3168*5c90c05cSAndroid Build Coastguard Worker
3169*5c90c05cSAndroid Build Coastguard Worker  ```c++
3170*5c90c05cSAndroid Build Coastguard Worker  void report_error(const char *format, const fmt::ArgList &args) {
3171*5c90c05cSAndroid Build Coastguard Worker    fmt::print("Error: {}");
3172*5c90c05cSAndroid Build Coastguard Worker    fmt::print(format, args);
3173*5c90c05cSAndroid Build Coastguard Worker  }
3174*5c90c05cSAndroid Build Coastguard Worker  FMT_VARIADIC(void, report_error, const char *)
3175*5c90c05cSAndroid Build Coastguard Worker
3176*5c90c05cSAndroid Build Coastguard Worker  report_error("file not found: {}", path);
3177*5c90c05cSAndroid Build Coastguard Worker  ```
3178*5c90c05cSAndroid Build Coastguard Worker
3179*5c90c05cSAndroid Build Coastguard Worker  Apart from a more natural syntax, this also improves performance as
3180*5c90c05cSAndroid Build Coastguard Worker  there is no need to construct temporary formatter objects and
3181*5c90c05cSAndroid Build Coastguard Worker  control arguments\' lifetimes. Because the wrapper functions are
3182*5c90c05cSAndroid Build Coastguard Worker  very lightweight, this doesn\'t cause code bloat even in pre-C++11
3183*5c90c05cSAndroid Build Coastguard Worker  mode.
3184*5c90c05cSAndroid Build Coastguard Worker
3185*5c90c05cSAndroid Build Coastguard Worker- Simplified common case of formatting an `std::string`. Now it
3186*5c90c05cSAndroid Build Coastguard Worker  requires a single function call:
3187*5c90c05cSAndroid Build Coastguard Worker
3188*5c90c05cSAndroid Build Coastguard Worker  ```c++
3189*5c90c05cSAndroid Build Coastguard Worker  std::string s = format("The answer is {}.", 42);
3190*5c90c05cSAndroid Build Coastguard Worker  ```
3191*5c90c05cSAndroid Build Coastguard Worker
3192*5c90c05cSAndroid Build Coastguard Worker  Previously it required 2 function calls:
3193*5c90c05cSAndroid Build Coastguard Worker
3194*5c90c05cSAndroid Build Coastguard Worker  ```c++
3195*5c90c05cSAndroid Build Coastguard Worker  std::string s = str(Format("The answer is {}.") << 42);
3196*5c90c05cSAndroid Build Coastguard Worker  ```
3197*5c90c05cSAndroid Build Coastguard Worker
3198*5c90c05cSAndroid Build Coastguard Worker  Instead of unsafe `c_str` function, `fmt::Writer` should be used
3199*5c90c05cSAndroid Build Coastguard Worker  directly to bypass creation of `std::string`:
3200*5c90c05cSAndroid Build Coastguard Worker
3201*5c90c05cSAndroid Build Coastguard Worker  ```c++
3202*5c90c05cSAndroid Build Coastguard Worker  fmt::Writer w;
3203*5c90c05cSAndroid Build Coastguard Worker  w.write("The answer is {}.", 42);
3204*5c90c05cSAndroid Build Coastguard Worker  w.c_str();  // returns a C string
3205*5c90c05cSAndroid Build Coastguard Worker  ```
3206*5c90c05cSAndroid Build Coastguard Worker
3207*5c90c05cSAndroid Build Coastguard Worker  This doesn\'t do dynamic memory allocation for small strings and is
3208*5c90c05cSAndroid Build Coastguard Worker  less error prone as the lifetime of the string is the same as for
3209*5c90c05cSAndroid Build Coastguard Worker  `std::string::c_str` which is well understood (hopefully).
3210*5c90c05cSAndroid Build Coastguard Worker
3211*5c90c05cSAndroid Build Coastguard Worker- Improved consistency in naming functions that are a part of the
3212*5c90c05cSAndroid Build Coastguard Worker  public API. Now all public functions are lowercase following the
3213*5c90c05cSAndroid Build Coastguard Worker  standard library conventions. Previously it was a combination of
3214*5c90c05cSAndroid Build Coastguard Worker  lowercase and CapitalizedWords. Issue
3215*5c90c05cSAndroid Build Coastguard Worker  https://github.com/fmtlib/fmt/issues/50.
3216*5c90c05cSAndroid Build Coastguard Worker
3217*5c90c05cSAndroid Build Coastguard Worker- Old functions are marked as deprecated and will be removed in the
3218*5c90c05cSAndroid Build Coastguard Worker  next release.
3219*5c90c05cSAndroid Build Coastguard Worker
3220*5c90c05cSAndroid Build Coastguard Worker**Other Changes**
3221*5c90c05cSAndroid Build Coastguard Worker
3222*5c90c05cSAndroid Build Coastguard Worker- Experimental support for printf format specifications (work in
3223*5c90c05cSAndroid Build Coastguard Worker  progress):
3224*5c90c05cSAndroid Build Coastguard Worker
3225*5c90c05cSAndroid Build Coastguard Worker  ```c++
3226*5c90c05cSAndroid Build Coastguard Worker  fmt::printf("The answer is %d.", 42);
3227*5c90c05cSAndroid Build Coastguard Worker  std::string s = fmt::sprintf("Look, a %s!", "string");
3228*5c90c05cSAndroid Build Coastguard Worker  ```
3229*5c90c05cSAndroid Build Coastguard Worker
3230*5c90c05cSAndroid Build Coastguard Worker- Support for hexadecimal floating point format specifiers `a` and
3231*5c90c05cSAndroid Build Coastguard Worker  `A`:
3232*5c90c05cSAndroid Build Coastguard Worker
3233*5c90c05cSAndroid Build Coastguard Worker  ```c++
3234*5c90c05cSAndroid Build Coastguard Worker  print("{:a}", -42.0); // Prints -0x1.5p+5
3235*5c90c05cSAndroid Build Coastguard Worker  print("{:A}", -42.0); // Prints -0X1.5P+5
3236*5c90c05cSAndroid Build Coastguard Worker  ```
3237*5c90c05cSAndroid Build Coastguard Worker
3238*5c90c05cSAndroid Build Coastguard Worker- CMake option `FMT_SHARED` that specifies whether to build format as
3239*5c90c05cSAndroid Build Coastguard Worker  a shared library (off by default).
3240*5c90c05cSAndroid Build Coastguard Worker
3241*5c90c05cSAndroid Build Coastguard Worker# 0.9.0 - 2014-05-13
3242*5c90c05cSAndroid Build Coastguard Worker
3243*5c90c05cSAndroid Build Coastguard Worker- More efficient implementation of variadic formatting functions.
3244*5c90c05cSAndroid Build Coastguard Worker
3245*5c90c05cSAndroid Build Coastguard Worker- `Writer::Format` now has a variadic overload:
3246*5c90c05cSAndroid Build Coastguard Worker
3247*5c90c05cSAndroid Build Coastguard Worker  ```c++
3248*5c90c05cSAndroid Build Coastguard Worker  Writer out;
3249*5c90c05cSAndroid Build Coastguard Worker  out.Format("Look, I'm {}!", "variadic");
3250*5c90c05cSAndroid Build Coastguard Worker  ```
3251*5c90c05cSAndroid Build Coastguard Worker
3252*5c90c05cSAndroid Build Coastguard Worker- For efficiency and consistency with other overloads, variadic
3253*5c90c05cSAndroid Build Coastguard Worker  overload of the `Format` function now returns `Writer` instead of
3254*5c90c05cSAndroid Build Coastguard Worker  `std::string`. Use the `str` function to convert it to
3255*5c90c05cSAndroid Build Coastguard Worker  `std::string`:
3256*5c90c05cSAndroid Build Coastguard Worker
3257*5c90c05cSAndroid Build Coastguard Worker  ```c++
3258*5c90c05cSAndroid Build Coastguard Worker  std::string s = str(Format("Look, I'm {}!", "variadic"));
3259*5c90c05cSAndroid Build Coastguard Worker  ```
3260*5c90c05cSAndroid Build Coastguard Worker
3261*5c90c05cSAndroid Build Coastguard Worker- Replaced formatter actions with output sinks: `NoAction` -\>
3262*5c90c05cSAndroid Build Coastguard Worker  `NullSink`, `Write` -\> `FileSink`, `ColorWriter` -\>
3263*5c90c05cSAndroid Build Coastguard Worker  `ANSITerminalSink`. This improves naming consistency and shouldn\'t
3264*5c90c05cSAndroid Build Coastguard Worker  affect client code unless these classes are used directly which
3265*5c90c05cSAndroid Build Coastguard Worker  should be rarely needed.
3266*5c90c05cSAndroid Build Coastguard Worker
3267*5c90c05cSAndroid Build Coastguard Worker- Added `ThrowSystemError` function that formats a message and throws
3268*5c90c05cSAndroid Build Coastguard Worker  `SystemError` containing the formatted message and system-specific
3269*5c90c05cSAndroid Build Coastguard Worker  error description. For example, the following code
3270*5c90c05cSAndroid Build Coastguard Worker
3271*5c90c05cSAndroid Build Coastguard Worker  ```c++
3272*5c90c05cSAndroid Build Coastguard Worker  FILE *f = fopen(filename, "r");
3273*5c90c05cSAndroid Build Coastguard Worker  if (!f)
3274*5c90c05cSAndroid Build Coastguard Worker    ThrowSystemError(errno, "Failed to open file '{}'") << filename;
3275*5c90c05cSAndroid Build Coastguard Worker  ```
3276*5c90c05cSAndroid Build Coastguard Worker
3277*5c90c05cSAndroid Build Coastguard Worker  will throw `SystemError` exception with description \"Failed to open
3278*5c90c05cSAndroid Build Coastguard Worker  file \'\<filename\>\': No such file or directory\" if file doesn\'t
3279*5c90c05cSAndroid Build Coastguard Worker  exist.
3280*5c90c05cSAndroid Build Coastguard Worker
3281*5c90c05cSAndroid Build Coastguard Worker- Support for AppVeyor continuous integration platform.
3282*5c90c05cSAndroid Build Coastguard Worker
3283*5c90c05cSAndroid Build Coastguard Worker- `Format` now throws `SystemError` in case of I/O errors.
3284*5c90c05cSAndroid Build Coastguard Worker
3285*5c90c05cSAndroid Build Coastguard Worker- Improve test infrastructure. Print functions are now tested by
3286*5c90c05cSAndroid Build Coastguard Worker  redirecting the output to a pipe.
3287*5c90c05cSAndroid Build Coastguard Worker
3288*5c90c05cSAndroid Build Coastguard Worker# 0.8.0 - 2014-04-14
3289*5c90c05cSAndroid Build Coastguard Worker
3290*5c90c05cSAndroid Build Coastguard Worker- Initial release
3291