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