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  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  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  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  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  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  2554*5c90c05cSAndroid Build Coastguard Worker 2555*5c90c05cSAndroid Build Coastguard Worker  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  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 |  |  | 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