diff --git a/dep/PackageList.txt b/dep/PackageList.txt
index 1f0ee92d392..86b699b54c0 100644
--- a/dep/PackageList.txt
+++ b/dep/PackageList.txt
@@ -14,7 +14,7 @@ efsw (Entropia File System Watcher - crossplatform file system watcher)
fmt (a small, safe and fast formatting library)
https://github.com/fmtlib/fmt
- Version: 10.2.1 https://github.com/fmtlib/fmt/releases/tag/10.2.1
+ Version: 12.0.0 https://github.com/fmtlib/fmt/releases/tag/12.0.0
G3D (a commercial-grade C++ 3D engine available as Open Source (BSD License)
http://g3d.sourceforge.net/
diff --git a/dep/fmt/CMakeLists.txt b/dep/fmt/CMakeLists.txt
index fc9b1f79134..edd263c2331 100644
--- a/dep/fmt/CMakeLists.txt
+++ b/dep/fmt/CMakeLists.txt
@@ -10,6 +10,7 @@
set(FMT_HEADERS
include/fmt/args.h
+ include/fmt/base.h
include/fmt/chrono.h
include/fmt/color.h
include/fmt/compile.h
diff --git a/dep/fmt/ChangeLog.md b/dep/fmt/ChangeLog.md
new file mode 100644
index 00000000000..b91b6f62b61
--- /dev/null
+++ b/dep/fmt/ChangeLog.md
@@ -0,0 +1,3225 @@
+# 12.0.0 - 2025-09-17
+
+- Optimized the default floating point formatting
+ (https://github.com/fmtlib/fmt/issues/3675,
+ https://github.com/fmtlib/fmt/issues/4516). In particular, formatting a
+ `double` with format string compilation into a stack allocated buffer is
+ more than 60% faster in version 12.0 compared to 11.2 according to
+ [dtoa-benchmark](https://github.com/fmtlib/dtoa-benchmark):
+
+ ```
+ Function Time (ns) Speedup
+ fmt11 34.471 1.00x
+ fmt12 21.000 1.64x
+ ```
+
+
+
+- Added `constexpr` support to `fmt::format`. For example:
+
+ ```c++
+ #include
+
+ using namespace fmt::literals;
+ std::string s = fmt::format(""_cf, 42);
+ ```
+
+ now works at compile time provided that `std::string` supports `constexpr`
+ (https://github.com/fmtlib/fmt/issues/3403,
+ https://github.com/fmtlib/fmt/pull/4456). Thanks @msvetkin.
+
+- Added `FMT_STATIC_FORMAT` that allows formatting into a string of the exact
+ required size at compile time.
+
+ For example:
+
+ ```c++
+ #include
+
+ constexpr auto s = FMT_STATIC_FORMAT("{}", 42);
+ ```
+
+ compiles to just
+
+ ```s
+ __ZL1s:
+ .asciiz "42"
+ ```
+
+ It can be accessed as a C string with `s.c_str()` or as a string view with
+ `s.str()`.
+
+- Improved C++20 module support
+ (https://github.com/fmtlib/fmt/pull/4451,
+ https://github.com/fmtlib/fmt/pull/4459,
+ https://github.com/fmtlib/fmt/pull/4476,
+ https://github.com/fmtlib/fmt/pull/4488,
+ https://github.com/fmtlib/fmt/issues/4491,
+ https://github.com/fmtlib/fmt/pull/4495).
+ Thanks @arBmind, @tkhyn, @Mishura4, @anonymouspc and @autoantwort.
+
+- Switched to using estimated display width in precision. For example:
+
+ ```c++
+ fmt::print("|{:.4}|\n|1234|\n", "๐ฑ๐ฑ๐ฑ");
+ ```
+
+ prints
+
+ 
+
+ because `๐ฑ` has an estimated width of 2
+ (https://github.com/fmtlib/fmt/issues/4272,
+ https://github.com/fmtlib/fmt/pull/4443,
+ https://github.com/fmtlib/fmt/pull/4475).
+ Thanks @nikhilreddydev and @localspook.
+
+- Fix interaction between debug presentation, precision, and width for strings
+ (https://github.com/fmtlib/fmt/pull/4478). Thanks @localspook.
+
+- Implemented allocator propagation on `basic_memory_buffer` move
+ (https://github.com/fmtlib/fmt/issues/4487,
+ https://github.com/fmtlib/fmt/pull/4490). Thanks @toprakmurat.
+
+- Fixed an ambiguity between `std::reference_wrapper` and `format_as`
+ formatters (https://github.com/fmtlib/fmt/issues/4424,
+ https://github.com/fmtlib/fmt/pull/4434). Thanks @jeremy-rifkin.
+
+- Removed the following deprecated APIs:
+
+ - `has_formatter`: use `is_formattable` instead,
+ - `basic_format_args::parse_context_type`,
+ `basic_format_args::formatter_type` and similar aliases in context types,
+ - wide stream overload of `fmt::printf`,
+ - wide stream overloads of `fmt::print` that take text styles,
+ - `is_*char` traits,
+ - `fmt::localtime`.
+
+- Deprecated wide overloads of `fmt::fprintf` and `fmt::sprintf`.
+
+- Improved diagnostics for the incorrect usage of `fmt::ptr`
+ (https://github.com/fmtlib/fmt/pull/4453). Thanks @TobiSchluter.
+
+- Made handling of ANSI escape sequences more efficient
+ (https://github.com/fmtlib/fmt/pull/4511,
+ https://github.com/fmtlib/fmt/pull/4528).
+ Thanks @localspook and @Anas-Hamdane.
+
+- Fixed a buffer overflow on all emphasis flags set
+ (https://github.com/fmtlib/fmt/pull/4498). Thanks @dominicpoeschko.
+
+- Fixed an integer overflow for precision close to the max `int` value.
+
+- Fixed compatibility with WASI (https://github.com/fmtlib/fmt/issues/4496,
+ https://github.com/fmtlib/fmt/pull/4497). Thanks @whitequark.
+
+- Fixed `back_insert_iterator` detection, preventing a fallback on slower path
+ that handles arbitrary iterators (https://github.com/fmtlib/fmt/issues/4454).
+
+- Fixed handling of invalid glibc `FILE` buffers
+ (https://github.com/fmtlib/fmt/issues/4469).
+
+- Added `wchar_t` support to the `std::byte` formatter
+ (https://github.com/fmtlib/fmt/issues/4479,
+ https://github.com/fmtlib/fmt/pull/4480). Thanks @phprus.
+
+- Changed component prefix from `fmt-` to `fmt_` for compatibility with
+ NSIS/CPack on Windows, e.g. `fmt-doc` changed to `fmt_doc`
+ (https://github.com/fmtlib/fmt/issues/4441,
+ https://github.com/fmtlib/fmt/pull/4442). Thanks @n-stein.
+
+- Added the `FMT_CUSTOM_ASSERT_FAIL` macro to simplify providing a custom
+ `fmt::assert_fail` implementation (https://github.com/fmtlib/fmt/pull/4505).
+ Thanks @HazardyKnusperkeks.
+
+- Switched to `FMT_THROW` on reporting format errors so that it can be
+ overriden by users when exceptions are disabled
+ (https://github.com/fmtlib/fmt/pull/4521). Thanks @HazardyKnusperkeks.
+
+- Improved master project detection and disabled install targets when using
+ {fmt} as a subproject by default (https://github.com/fmtlib/fmt/pull/4536).
+ Thanks @crueter.
+
+- Made various code improvements
+ (https://github.com/fmtlib/fmt/pull/4445,
+ https://github.com/fmtlib/fmt/pull/4448,
+ https://github.com/fmtlib/fmt/pull/4473,
+ https://github.com/fmtlib/fmt/pull/4522).
+ Thanks @localspook, @tchaikov and @way4sahil.
+
+- Added Conan instructions to the docs
+ (https://github.com/fmtlib/fmt/pull/4537). Thanks @uilianries.
+
+- Removed Bazel files to avoid issues with downstream packaging
+ (https://github.com/fmtlib/fmt/pull/4530). Thanks @mering.
+
+- Added more entries for generated files to `.gitignore`
+ (https://github.com/fmtlib/fmt/pull/4355,
+ https://github.com/fmtlib/fmt/pull/4512).
+ Thanks @dinomight and @localspook.
+
+- Fixed various warnings and compilation issues
+ (https://github.com/fmtlib/fmt/pull/4447,
+ https://github.com/fmtlib/fmt/issues/4470,
+ https://github.com/fmtlib/fmt/pull/4474,
+ https://github.com/fmtlib/fmt/pull/4477,
+ https://github.com/fmtlib/fmt/pull/4471,
+ https://github.com/fmtlib/fmt/pull/4483,
+ https://github.com/fmtlib/fmt/pull/4515,
+ https://github.com/fmtlib/fmt/issues/4533,
+ https://github.com/fmtlib/fmt/pull/4534).
+ Thanks @dodomorandi, @localspook, @remyjette, @Tomek-Stolarczyk, @Mishura4,
+ @mattiasljungstrom and @FatihBAKIR.
+
+# 11.2.0 - 2025-05-03
+
+- Added the `s` specifier for `std::error_code`. It allows formatting an error
+ message as a string. For example:
+
+ ```c++
+ #include
+
+ int main() {
+ auto ec = std::make_error_code(std::errc::no_such_file_or_directory);
+ fmt::print("{:s}\n", ec);
+ }
+ ```
+
+ prints
+
+ ```
+ No such file or directory
+ ```
+ (The actual message is platform-specific.)
+
+- Fixed formatting of `std::chrono::local_time` and `tm`
+ (https://github.com/fmtlib/fmt/issues/3815,
+ https://github.com/fmtlib/fmt/issues/4350).
+ For example ([godbolt](https://www.godbolt.org/z/8o4b1PPn5)):
+
+ ```c++
+ #include
+
+ int main() {
+ std::chrono::zoned_time zt(
+ std::chrono::current_zone(),
+ std::chrono::system_clock::now());
+ fmt::print("{}", zt.get_local_time());
+ }
+ ```
+
+ is now formatted consistenly across platforms.
+
+- Added diagnostics for cases when timezone information is not available.
+ For example:
+
+ ```c++
+ fmt::print("{:Z}", std::chrono::local_seconds());
+ ```
+
+ now gives a compile-time error.
+
+- Deprecated `fmt::localtime` in favor of `std::localtime`.
+
+- Fixed compilation with GCC 15 and C++20 modules enabled
+ (https://github.com/fmtlib/fmt/pull/4347). Thanks @tkhyn.
+
+- Fixed handling of named arguments in format specs
+ (https://github.com/fmtlib/fmt/issues/4360,
+ https://github.com/fmtlib/fmt/pull/4361). Thanks @dinomight.
+
+- Added error reporting for duplicate named arguments
+ (https://github.com/fmtlib/fmt/issues/4282,
+ https://github.com/fmtlib/fmt/pull/4367). Thanks @dinomight.
+
+- Fixed formatting of `long` with `FMT_BUILTIN_TYPES=0`
+ (https://github.com/fmtlib/fmt/issues/4375,
+ https://github.com/fmtlib/fmt/issues/4394).
+
+- Optimized `text_style` using bit packing
+ (https://github.com/fmtlib/fmt/pull/4363). Thanks @localspook.
+
+- Added support for incomplete types (https://github.com/fmtlib/fmt/issues/3180,
+ https://github.com/fmtlib/fmt/pull/4383). Thanks @localspook.
+
+- Fixed a flush issue in `fmt::print` when using libstdc++
+ (https://github.com/fmtlib/fmt/issues/4398).
+
+- Fixed `fmt::println` usage with `FMT_ENFORCE_COMPILE_STRING` and legacy
+ compile-time checks (https://github.com/fmtlib/fmt/pull/4407).
+ Thanks @madmaxoft.
+
+- Removed legacy header `fmt/core.h` from docs
+ (https://github.com/fmtlib/fmt/pull/4421,
+ https://github.com/fmtlib/fmt/pull/4422). Thanks @krzysztofkortas.
+
+- Worked around limitations of `__builtin_strlen` during constant evaluation
+ (https://github.com/fmtlib/fmt/issues/4423,
+ https://github.com/fmtlib/fmt/pull/4429). Thanks @BRevzin.
+
+- Worked around a bug in MSVC v141 (https://github.com/fmtlib/fmt/issues/4412,
+ https://github.com/fmtlib/fmt/pull/4413). Thanks @hirohira9119.
+
+- Removed the `fmt_detail` namespace
+ (https://github.com/fmtlib/fmt/issues/4324).
+
+- Removed specializations of `std::is_floating_point` in tests
+ (https://github.com/fmtlib/fmt/issues/4417).
+
+- Fixed a CMake error when setting `CMAKE_MODULE_PATH` in the pedantic mode
+ (https://github.com/fmtlib/fmt/pull/4426). Thanks @rlalik.
+
+- Updated the Bazel config (https://github.com/fmtlib/fmt/pull/4400).
+ Thanks @Vertexwahn.
+
+# 11.1.4 - 2025-02-26
+
+- Fixed ABI compatibility with earlier 11.x versions on Windows
+ (https://github.com/fmtlib/fmt/issues/4359).
+
+- Improved the logic of switching between fixed and exponential format for
+ `float` (https://github.com/fmtlib/fmt/issues/3649).
+
+- Moved `is_compiled_string` to the public API
+ (https://github.com/fmtlib/fmt/issues/4335,
+ https://github.com/fmtlib/fmt/issues/4342). Thanks @SwooshyCueb.
+
+- Simplified implementation of `operator""_cf`
+ (https://github.com/fmtlib/fmt/pull/4349). Thanks @localspook.
+
+- Fixed `__builtin_strlen` detection (https://github.com/fmtlib/fmt/pull/4329).
+ Thanks @localspook.
+
+- Fixed handling of BMI paths with the Ninja generator
+ (https://github.com/fmtlib/fmt/pull/4344). Thanks @tkhyn.
+
+- Fixed gcc 8.3 compile errors (https://github.com/fmtlib/fmt/issues/4331,
+ https://github.com/fmtlib/fmt/pull/4336). Thanks @sergiud.
+
+- Fixed a bogus MSVC warning (https://github.com/fmtlib/fmt/pull/4356).
+ Thanks @dinomight.
+
+# 11.1.3 - 2025-01-25
+
+- Fixed compilation on GCC 9.4 (https://github.com/fmtlib/fmt/issues/4313).
+
+- Worked around an internal compiler error when using C++20 modules with GCC
+ 14.2 and earlier (https://github.com/fmtlib/fmt/issues/4295).
+
+- Worked around a bug in GCC 6 (https://github.com/fmtlib/fmt/issues/4318).
+
+- Fixed an issue caused by instantiating `formatter`
+ (https://github.com/fmtlib/fmt/issues/4303,
+ https://github.com/fmtlib/fmt/pull/4325). Thanks @timsong-cpp.
+
+- Fixed formatting into `std::ostreambuf_iterator` when using format string
+ compilation (https://github.com/fmtlib/fmt/issues/4309,
+ https://github.com/fmtlib/fmt/pull/4312). Thanks @phprus.
+
+- Restored a constraint on the map formatter so that it correctly reports as
+ unformattable when the element is (https://github.com/fmtlib/fmt/pull/4326).
+ Thanks @timsong-cpp.
+
+- Reduced the size of format specs (https://github.com/fmtlib/fmt/issues/4298).
+
+- Readded `args()` to `fmt::format_context`
+ (https://github.com/fmtlib/fmt/issues/4307,
+ https://github.com/fmtlib/fmt/pull/4310). Thanks @Erroneous1.
+
+- Fixed a bogus MSVC warning (https://github.com/fmtlib/fmt/issues/4314,
+ https://github.com/fmtlib/fmt/pull/4322). Thanks @ZehMatt.
+
+- Fixed a pedantic mode error in the CMake config
+ (https://github.com/fmtlib/fmt/pull/4327). Thanks @rlalik.
+
+# 11.1.2 - 2025-01-12
+
+- Fixed ABI compatibility with earlier 11.x versions
+ (https://github.com/fmtlib/fmt/issues/4292).
+
+- Added `wchar_t` support to the `std::bitset` formatter
+ (https://github.com/fmtlib/fmt/issues/4285,
+ https://github.com/fmtlib/fmt/pull/4286,
+ https://github.com/fmtlib/fmt/issues/4289,
+ https://github.com/fmtlib/fmt/pull/4290). Thanks @phprus.
+
+- Prefixed CMake components with `fmt-` to simplify usage of {fmt} via
+ `add_subdirectory` (https://github.com/fmtlib/fmt/issues/4283).
+
+- Updated docs for meson (https://github.com/fmtlib/fmt/pull/4291).
+ Thanks @trim21.
+
+- Fixed a compilation error in chrono on nvcc
+ (https://github.com/fmtlib/fmt/issues/4297,
+ https://github.com/fmtlib/fmt/pull/4301). Thanks @breyerml.
+
+- Fixed various warnings
+ (https://github.com/fmtlib/fmt/pull/4288,
+ https://github.com/fmtlib/fmt/pull/4299). Thanks @GamesTrap and @edo9300.
+
+# 11.1.1 - 2024-12-27
+
+- Fixed ABI compatibility with earlier 11.x versions
+ (https://github.com/fmtlib/fmt/issues/4278).
+
+- Defined CMake components (`core` and `doc`) to allow docs to be installed
+ separately (https://github.com/fmtlib/fmt/pull/4276).
+ Thanks @carlsmedstad.
+
+# 11.1.0 - 2024-12-25
+
+- Improved C++20 module support
+ (https://github.com/fmtlib/fmt/issues/4081,
+ https://github.com/fmtlib/fmt/pull/4083,
+ https://github.com/fmtlib/fmt/pull/4084,
+ https://github.com/fmtlib/fmt/pull/4152,
+ https://github.com/fmtlib/fmt/issues/4153,
+ https://github.com/fmtlib/fmt/pull/4169,
+ https://github.com/fmtlib/fmt/issues/4190,
+ https://github.com/fmtlib/fmt/issues/4234,
+ https://github.com/fmtlib/fmt/pull/4239).
+ Thanks @kamrann and @Arghnews.
+
+- Reduced debug (unoptimized) binary code size and the number of template
+ instantiations when passing formatting arguments. For example, unoptimized
+ binary code size for `fmt::print("{}", 42)` was reduced by ~40% on GCC and
+ ~60% on clang (x86-64).
+
+ GCC:
+ - Before: 161 instructions of which 105 are in reusable functions
+ ([godbolt](https://www.godbolt.org/z/s9bGoo4ze)).
+ - After: 116 instructions of which 60 are in reusable functions
+ ([godbolt](https://www.godbolt.org/z/r7GGGxMs6)).
+
+ Clang:
+ - Before: 310 instructions of which 251 are in reusable functions
+ ([godbolt](https://www.godbolt.org/z/Ts88b7M9o)).
+ - After: 194 instructions of which 135 are in reusable functions
+ ([godbolt](https://www.godbolt.org/z/vcrjP8ceW)).
+
+- Added an experimental `fmt::writer` API that can be used for writing to
+ different destinations such as files or strings
+ (https://github.com/fmtlib/fmt/issues/2354).
+ For example ([godbolt](https://www.godbolt.org/z/rWoKfbP7e)):
+
+ ```c++
+ #include
+
+ void write_text(fmt::writer w) {
+ w.print("The answer is {}.", 42);
+ }
+
+ int main() {
+ // Write to FILE.
+ write_text(stdout);
+
+ // Write to fmt::ostream.
+ auto f = fmt::output_file("myfile");
+ write_text(f);
+
+ // Write to std::string.
+ auto sb = fmt::string_buffer();
+ write_text(sb);
+ std::string s = sb.str();
+ }
+ ```
+
+- Added width and alignment support to the formatter of `std::error_code`.
+
+- Made `std::expected` formattable
+ (https://github.com/fmtlib/fmt/issues/4145,
+ https://github.com/fmtlib/fmt/pull/4148).
+ For example ([godbolt](https://www.godbolt.org/z/hrj5c6G86)):
+
+ ```c++
+ fmt::print("{}", std::expected());
+ ```
+
+ prints
+
+ ```
+ expected()
+ ```
+
+ Thanks @phprus.
+
+- Made `fmt::is_formattable` SFINAE-friendly
+ (https://github.com/fmtlib/fmt/issues/4147).
+
+- Added support for `_BitInt` formatting when using clang
+ (https://github.com/fmtlib/fmt/issues/4007,
+ https://github.com/fmtlib/fmt/pull/4072,
+ https://github.com/fmtlib/fmt/issues/4140,
+ https://github.com/fmtlib/fmt/issues/4173,
+ https://github.com/fmtlib/fmt/pull/4176).
+ For example ([godbolt](https://www.godbolt.org/z/KWjbWec5z)):
+
+ ```c++
+ using int42 = _BitInt(42);
+ fmt::print("{}", int42(100));
+ ```
+
+ Thanks @Arghnews.
+
+- Added the `n` specifier for tuples and pairs
+ (https://github.com/fmtlib/fmt/pull/4107). Thanks @someonewithpc.
+
+- Added support for tuple-like types to `fmt::join`
+ (https://github.com/fmtlib/fmt/issues/4226,
+ https://github.com/fmtlib/fmt/pull/4230). Thanks @phprus.
+
+- Made more types formattable at compile time
+ (https://github.com/fmtlib/fmt/pull/4127). Thanks @AnthonyVH.
+
+- Implemented a more efficient compile-time `fmt::formatted_size`
+ (https://github.com/fmtlib/fmt/issues/4102,
+ https://github.com/fmtlib/fmt/pull/4103). Thanks @phprus.
+
+- Fixed compile-time formatting of some string types
+ (https://github.com/fmtlib/fmt/pull/4065). Thanks @torshepherd.
+
+- Made compiled version of `fmt::format_to` work with
+ `std::back_insert_iterator>`
+ (https://github.com/fmtlib/fmt/issues/4206,
+ https://github.com/fmtlib/fmt/pull/4211). Thanks @phprus.
+
+- Added a formatter for `std::reference_wrapper`
+ (https://github.com/fmtlib/fmt/pull/4163,
+ https://github.com/fmtlib/fmt/pull/4164). Thanks @yfeldblum and @phprus.
+
+- Added experimental padding support (glibc `strftime` extension) to `%m`, `%j`
+ and `%Y` (https://github.com/fmtlib/fmt/pull/4161). Thanks @KKhanhH.
+
+- Made microseconds formatted as `us` instead of `ยตs` if the Unicode support is
+ disabled (https://github.com/fmtlib/fmt/issues/4088).
+
+- Fixed an unreleased regression in transcoding of surrogate pairs
+ (https://github.com/fmtlib/fmt/issues/4094,
+ https://github.com/fmtlib/fmt/pull/4095). Thanks @phprus.
+
+- Made `fmt::appender` satisfy `std::output_iterator` concept
+ (https://github.com/fmtlib/fmt/issues/4092,
+ https://github.com/fmtlib/fmt/pull/4093). Thanks @phprus.
+
+- Made `std::iterator_traits` standard-conforming
+ (https://github.com/fmtlib/fmt/pull/4185). Thanks @CaseyCarter.
+
+- Made it easier to reuse `fmt::formatter` for types with
+ an implicit conversion to `std::string_view`
+ (https://github.com/fmtlib/fmt/issues/4036,
+ https://github.com/fmtlib/fmt/pull/4055). Thanks @Arghnews.
+
+- Made it possible to disable `` use via `FMT_CPP_LIB_FILESYSTEM`
+ for compatibility with some video game console SDKs, e.g. Nintendo Switch SDK
+ (https://github.com/fmtlib/fmt/issues/4257,
+ https://github.com/fmtlib/fmt/pull/4258,
+ https://github.com/fmtlib/fmt/pull/4259). Thanks @W4RH4WK and @phprus.
+
+- Fixed compatibility with platforms that use 80-bit `long double`
+ (https://github.com/fmtlib/fmt/issues/4245,
+ https://github.com/fmtlib/fmt/pull/4246). Thanks @jsirpoma.
+
+- Added support for UTF-32 code units greater than `0xFFFF` in fill
+ (https://github.com/fmtlib/fmt/issues/4201).
+
+- Fixed handling of legacy encodings on Windows with GCC
+ (https://github.com/fmtlib/fmt/issues/4162).
+
+- Made `fmt::to_string` take `fmt::basic_memory_buffer` by const reference
+ (https://github.com/fmtlib/fmt/issues/4261,
+ https://github.com/fmtlib/fmt/pull/4262). Thanks @sascha-devel.
+
+- Added `fmt::dynamic_format_arg_store::size`
+ (https://github.com/fmtlib/fmt/pull/4270). Thanks @hannes-harnisch.
+
+- Removed the ability to control locale usage via an undocumented
+ `FMT_STATIC_THOUSANDS_SEPARATOR` in favor of `FMT_USE_LOCALE`.
+
+- Renamed `FMT_EXCEPTIONS` to `FMT_USE_EXCEPTIONS` for consistency with other
+ similar macros.
+
+- Improved include directory ordering to reduce the chance of including
+ incorrect headers when using multiple versions of {fmt}
+ (https://github.com/fmtlib/fmt/pull/4116). Thanks @cdzhan.
+
+- Made it possible to compile a subset of {fmt} without the C++ runtime.
+
+- Improved documentation and README
+ (https://github.com/fmtlib/fmt/pull/4066,
+ https://github.com/fmtlib/fmt/issues/4117,
+ https://github.com/fmtlib/fmt/issues/4203,
+ https://github.com/fmtlib/fmt/pull/4235). Thanks @zyctree and @nikola-sh.
+
+- Improved the documentation generator (https://github.com/fmtlib/fmt/pull/4110,
+ https://github.com/fmtlib/fmt/pull/4115). Thanks @rturrado.
+
+- Improved CI (https://github.com/fmtlib/fmt/pull/4155,
+ https://github.com/fmtlib/fmt/pull/4151). Thanks @phprus.
+
+- Fixed various warnings and compilation issues
+ (https://github.com/fmtlib/fmt/issues/2708,
+ https://github.com/fmtlib/fmt/issues/4091,
+ https://github.com/fmtlib/fmt/issues/4109,
+ https://github.com/fmtlib/fmt/issues/4113,
+ https://github.com/fmtlib/fmt/issues/4125,
+ https://github.com/fmtlib/fmt/issues/4129,
+ https://github.com/fmtlib/fmt/pull/4130,
+ https://github.com/fmtlib/fmt/pull/4131,
+ https://github.com/fmtlib/fmt/pull/4132,
+ https://github.com/fmtlib/fmt/issues/4133,
+ https://github.com/fmtlib/fmt/issues/4144,
+ https://github.com/fmtlib/fmt/issues/4150,
+ https://github.com/fmtlib/fmt/issues/4158,
+ https://github.com/fmtlib/fmt/pull/4159,
+ https://github.com/fmtlib/fmt/issues/4160,
+ https://github.com/fmtlib/fmt/pull/4170,
+ https://github.com/fmtlib/fmt/issues/4177,
+ https://github.com/fmtlib/fmt/pull/4187,
+ https://github.com/fmtlib/fmt/pull/4188,
+ https://github.com/fmtlib/fmt/pull/4194,
+ https://github.com/fmtlib/fmt/pull/4200,
+ https://github.com/fmtlib/fmt/issues/4205,
+ https://github.com/fmtlib/fmt/issues/4207,
+ https://github.com/fmtlib/fmt/pull/4208,
+ https://github.com/fmtlib/fmt/pull/4210,
+ https://github.com/fmtlib/fmt/issues/4220,
+ https://github.com/fmtlib/fmt/issues/4231,
+ https://github.com/fmtlib/fmt/issues/4232,
+ https://github.com/fmtlib/fmt/pull/4233,
+ https://github.com/fmtlib/fmt/pull/4236,
+ https://github.com/fmtlib/fmt/pull/4267,
+ https://github.com/fmtlib/fmt/pull/4271).
+ Thanks @torsten48, @Arghnews, @tinfoilboy, @aminya, @Ottani, @zeroomega,
+ @c4v4, @kongy, @vinayyadav3016, @sergio-nsk, @phprus and @YexuanXiao.
+
+# 11.0.2 - 2024-07-20
+
+- Fixed compatibility with non-POSIX systems
+ (https://github.com/fmtlib/fmt/issues/4054,
+ https://github.com/fmtlib/fmt/issues/4060).
+
+- Fixed performance regressions when using `std::back_insert_iterator` with
+ `fmt::format_to` (https://github.com/fmtlib/fmt/issues/4070).
+
+- Fixed handling of `std::generator` and move-only iterators
+ (https://github.com/fmtlib/fmt/issues/4053,
+ https://github.com/fmtlib/fmt/pull/4057). Thanks @Arghnews.
+
+- Made `formatter::parse` work with types convertible to
+ `std::string_view` (https://github.com/fmtlib/fmt/issues/4036,
+ https://github.com/fmtlib/fmt/pull/4055). Thanks @Arghnews.
+
+- Made `volatile void*` formattable
+ (https://github.com/fmtlib/fmt/issues/4049,
+ https://github.com/fmtlib/fmt/pull/4056). Thanks @Arghnews.
+
+- Made `Glib::ustring` not be confused with `std::string`
+ (https://github.com/fmtlib/fmt/issues/4052).
+
+- Made `fmt::context` iterator compatible with STL algorithms that rely on
+ iterator category (https://github.com/fmtlib/fmt/issues/4079).
+
+# 11.0.1 - 2024-07-05
+
+- Fixed version number in the inline namespace
+ (https://github.com/fmtlib/fmt/issues/4047).
+
+- Fixed disabling Unicode support via CMake
+ (https://github.com/fmtlib/fmt/issues/4051).
+
+- Fixed deprecated `visit_format_arg` (https://github.com/fmtlib/fmt/pull/4043).
+ Thanks @nebkat.
+
+- Fixed handling of a sign and improved the `std::complex` formater
+ (https://github.com/fmtlib/fmt/pull/4034,
+ https://github.com/fmtlib/fmt/pull/4050). Thanks @tesch1 and @phprus.
+
+- Fixed ADL issues in `fmt::printf` when using C++20
+ (https://github.com/fmtlib/fmt/pull/4042). Thanks @toge.
+
+- Removed a redundant check in the formatter for `std::expected`
+ (https://github.com/fmtlib/fmt/pull/4040). Thanks @phprus.
+
+# 11.0.0 - 2024-07-01
+
+- Added `fmt/base.h` which provides a subset of the API with minimal include
+ dependencies and enough functionality to replace all uses of the `printf`
+ family of functions. This brings the compile time of code using {fmt} much
+ closer to the equivalent `printf` code as shown on the following benchmark
+ that compiles 100 source files:
+
+ | Method | Compile Time (s) |
+ |--------------|------------------|
+ | printf | 1.6 |
+ | IOStreams | 25.9 |
+ | fmt 10.x | 19.0 |
+ | fmt 11.0 | 4.8 |
+ | tinyformat | 29.1 |
+ | Boost Format | 55.0 |
+
+ This gives almost 4x improvement in build speed compared to version 10.
+ Note that the benchmark is purely formatting code and includes. In real
+ projects the difference from `printf` will be smaller partly because common
+ standard headers will be included in almost any translation unit (TU) anyway.
+ In particular, in every case except `printf` above ~1s is spent in total on
+ including `` in all TUs.
+
+- Optimized includes in other headers such as `fmt/format.h` which is now
+ roughly equivalent to the old `fmt/core.h` in terms of build speed.
+
+- Migrated the documentation at https://fmt.dev/ from Sphinx to MkDocs.
+
+- Improved C++20 module support
+ (https://github.com/fmtlib/fmt/issues/3990,
+ https://github.com/fmtlib/fmt/pull/3991,
+ https://github.com/fmtlib/fmt/issues/3993,
+ https://github.com/fmtlib/fmt/pull/3994,
+ https://github.com/fmtlib/fmt/pull/3997,
+ https://github.com/fmtlib/fmt/pull/3998,
+ https://github.com/fmtlib/fmt/pull/4004,
+ https://github.com/fmtlib/fmt/pull/4005,
+ https://github.com/fmtlib/fmt/pull/4006,
+ https://github.com/fmtlib/fmt/pull/4013,
+ https://github.com/fmtlib/fmt/pull/4027,
+ https://github.com/fmtlib/fmt/pull/4029). In particular, native CMake support
+ for modules is now used if available. Thanks @yujincheng08 and @matt77hias.
+
+- Added an option to replace standard includes with `import std` enabled via
+ the `FMT_IMPORT_STD` macro (https://github.com/fmtlib/fmt/issues/3921,
+ https://github.com/fmtlib/fmt/pull/3928). Thanks @matt77hias.
+
+- Exported `fmt::range_format`, `fmt::range_format_kind` and
+ `fmt::compiled_string` from the `fmt` module
+ (https://github.com/fmtlib/fmt/pull/3970,
+ https://github.com/fmtlib/fmt/pull/3999).
+ Thanks @matt77hias and @yujincheng08.
+
+- Improved integration with stdio in `fmt::print`, enabling direct writes
+ into a C stream buffer in common cases. This may give significant
+ performance improvements ranging from tens of percent to [2x](
+ https://stackoverflow.com/a/78457454/471164) and eliminates dynamic memory
+ allocations on the buffer level. It is currently enabled for built-in and
+ string types with wider availability coming up in future releases.
+
+ For example, it gives ~24% improvement on a [simple benchmark](
+ https://isocpp.org/files/papers/P3107R5.html#perf) compiled with Apple clang
+ version 15.0.0 (clang-1500.1.0.2.5) and run on macOS 14.2.1:
+
+ ```
+ -------------------------------------------------------
+ Benchmark Time CPU Iterations
+ -------------------------------------------------------
+ printf 81.8 ns 81.5 ns 8496899
+ fmt::print (10.x) 63.8 ns 61.9 ns 11524151
+ fmt::print (11.0) 51.3 ns 51.0 ns 13846580
+ ```
+
+- Improved safety of `fmt::format_to` when writing to an array
+ (https://github.com/fmtlib/fmt/pull/3805).
+ For example ([godbolt](https://www.godbolt.org/z/cYrn8dWY8)):
+
+ ```c++
+ auto volkswagen = char[4];
+ auto result = fmt::format_to(volkswagen, "elephant");
+ ```
+
+ no longer results in a buffer overflow. Instead the output will be truncated
+ and you can get the end iterator and whether truncation occurred from the
+ `result` object. Thanks @ThePhD.
+
+- Enabled Unicode support by default in MSVC, bringing it on par with other
+ compilers and making it unnecessary for users to enable it explicitly.
+ Most of {fmt} is encoding-agnostic but this prevents mojibake in places
+ where encoding matters such as path formatting and terminal output.
+ You can control the Unicode support via the CMake `FMT_UNICODE` option.
+ Note that some {fmt} packages such as the one in vcpkg have already been
+ compiled with Unicode enabled.
+
+- Added a formatter for `std::expected`
+ (https://github.com/fmtlib/fmt/pull/3834). Thanks @dominicpoeschko.
+
+- Added a formatter for `std::complex`
+ (https://github.com/fmtlib/fmt/issues/1467,
+ https://github.com/fmtlib/fmt/issues/3886,
+ https://github.com/fmtlib/fmt/pull/3892,
+ https://github.com/fmtlib/fmt/pull/3900). Thanks @phprus.
+
+- Added a formatter for `std::type_info`
+ (https://github.com/fmtlib/fmt/pull/3978). Thanks @matt77hias.
+
+- Specialized `formatter` for `std::basic_string` types with custom traits
+ and allocators (https://github.com/fmtlib/fmt/issues/3938,
+ https://github.com/fmtlib/fmt/pull/3943). Thanks @dieram3.
+
+- Added formatters for `std::chrono::day`, `std::chrono::month`,
+ `std::chrono::year` and `std::chrono::year_month_day`
+ (https://github.com/fmtlib/fmt/issues/3758,
+ https://github.com/fmtlib/fmt/issues/3772,
+ https://github.com/fmtlib/fmt/pull/3906,
+ https://github.com/fmtlib/fmt/pull/3913). For example:
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ fmt::print(fg(fmt::color::green), "{}\n", std::chrono::day(7));
+ }
+ ```
+
+ prints a green day:
+
+
+
+ Thanks @zivshek.
+
+- Fixed handling of precision in `%S` (https://github.com/fmtlib/fmt/issues/3794,
+ https://github.com/fmtlib/fmt/pull/3814). Thanks @js324.
+
+- Added support for the `-` specifier (glibc `strftime` extension) to day of
+ the month (`%d`) and week of the year (`%W`, `%U`, `%V`) specifiers
+ (https://github.com/fmtlib/fmt/pull/3976). Thanks @ZaheenJ.
+
+- Fixed the scope of the `-` extension in chrono formatting so that it doesn't
+ apply to subsequent specifiers (https://github.com/fmtlib/fmt/issues/3811,
+ https://github.com/fmtlib/fmt/pull/3812). Thanks @phprus.
+
+- Improved handling of `time_point::min()`
+ (https://github.com/fmtlib/fmt/issues/3282).
+
+- Added support for character range formatting
+ (https://github.com/fmtlib/fmt/issues/3857,
+ https://github.com/fmtlib/fmt/pull/3863). Thanks @js324.
+
+- Added `string` and `debug_string` range formatters
+ (https://github.com/fmtlib/fmt/pull/3973,
+ https://github.com/fmtlib/fmt/pull/4024). Thanks @matt77hias.
+
+- Enabled ADL for `begin` and `end` in `fmt::join`
+ (https://github.com/fmtlib/fmt/issues/3813,
+ https://github.com/fmtlib/fmt/pull/3824). Thanks @bbolli.
+
+- Made contiguous iterator optimizations apply to `std::basic_string` iterators
+ (https://github.com/fmtlib/fmt/pull/3798). Thanks @phprus.
+
+- Added support for ranges with mutable `begin` and `end`
+ (https://github.com/fmtlib/fmt/issues/3752,
+ https://github.com/fmtlib/fmt/pull/3800,
+ https://github.com/fmtlib/fmt/pull/3955). Thanks @tcbrindle and @Arghnews.
+
+- Added support for move-only iterators to `fmt::join`
+ (https://github.com/fmtlib/fmt/issues/3802,
+ https://github.com/fmtlib/fmt/pull/3946). Thanks @Arghnews.
+
+- Moved range and iterator overloads of `fmt::join` to `fmt/ranges.h`, next
+ to other overloads.
+
+- Fixed handling of types with `begin` returning `void` such as Eigen matrices
+ (https://github.com/fmtlib/fmt/issues/3839,
+ https://github.com/fmtlib/fmt/pull/3964). Thanks @Arghnews.
+
+- Added an `fmt::formattable` concept (https://github.com/fmtlib/fmt/pull/3974).
+ Thanks @matt77hias.
+
+- Added support for `__float128` (https://github.com/fmtlib/fmt/issues/3494).
+
+- Fixed rounding issues when formatting `long double` with fixed precision
+ (https://github.com/fmtlib/fmt/issues/3539).
+
+- Made `fmt::isnan` not trigger floating-point exception for NaN values
+ (https://github.com/fmtlib/fmt/issues/3948,
+ https://github.com/fmtlib/fmt/pull/3951). Thanks @alexdewar.
+
+- Removed dependency on `` for `std::allocator_traits` when possible
+ (https://github.com/fmtlib/fmt/pull/3804). Thanks @phprus.
+
+- Enabled compile-time checks in formatting functions that take text colors and
+ styles.
+
+- Deprecated wide stream overloads of `fmt::print` that take text styles.
+
+- Made format string compilation work with clang 12 and later despite
+ only partial non-type template parameter support
+ (https://github.com/fmtlib/fmt/issues/4000,
+ https://github.com/fmtlib/fmt/pull/4001). Thanks @yujincheng08.
+
+- Made `fmt::iterator_buffer`'s move constructor `noexcept`
+ (https://github.com/fmtlib/fmt/pull/3808). Thanks @waywardmonkeys.
+
+- Started enforcing that `formatter::format` is const for compatibility
+ with `std::format` (https://github.com/fmtlib/fmt/issues/3447).
+
+- Added `fmt::basic_format_arg::visit` and deprecated `fmt::visit_format_arg`.
+
+- Made `fmt::basic_string_view` not constructible from `nullptr` for
+ consistency with `std::string_view` in C++23
+ (https://github.com/fmtlib/fmt/pull/3846). Thanks @dalle.
+
+- Fixed `fmt::group_digits` for negative integers
+ (https://github.com/fmtlib/fmt/issues/3891,
+ https://github.com/fmtlib/fmt/pull/3901). Thanks @phprus.
+
+- Fixed handling of negative ids in `fmt::basic_format_args::get`
+ (https://github.com/fmtlib/fmt/pull/3945). Thanks @marlenecota.
+
+- Fixed handling of a buffer boundary on flush
+ (https://github.com/fmtlib/fmt/issues/4229).
+
+- Improved named argument validation
+ (https://github.com/fmtlib/fmt/issues/3817).
+
+- Disabled copy construction/assignment for `fmt::format_arg_store` and
+ fixed moved construction (https://github.com/fmtlib/fmt/pull/3833).
+ Thanks @ivafanas.
+
+- Worked around a locale issue in RHEL/devtoolset
+ (https://github.com/fmtlib/fmt/issues/3858,
+ https://github.com/fmtlib/fmt/pull/3859). Thanks @g199209.
+
+- Added RTTI detection for MSVC (https://github.com/fmtlib/fmt/pull/3821,
+ https://github.com/fmtlib/fmt/pull/3963). Thanks @edo9300.
+
+- Migrated the documentation from Sphinx to MkDocs.
+
+- Improved documentation and README
+ (https://github.com/fmtlib/fmt/issues/3775,
+ https://github.com/fmtlib/fmt/pull/3784,
+ https://github.com/fmtlib/fmt/issues/3788,
+ https://github.com/fmtlib/fmt/pull/3789,
+ https://github.com/fmtlib/fmt/pull/3793,
+ https://github.com/fmtlib/fmt/issues/3818,
+ https://github.com/fmtlib/fmt/pull/3820,
+ https://github.com/fmtlib/fmt/pull/3822,
+ https://github.com/fmtlib/fmt/pull/3843,
+ https://github.com/fmtlib/fmt/pull/3890,
+ https://github.com/fmtlib/fmt/issues/3894,
+ https://github.com/fmtlib/fmt/pull/3895,
+ https://github.com/fmtlib/fmt/pull/3905,
+ https://github.com/fmtlib/fmt/issues/3942,
+ https://github.com/fmtlib/fmt/pull/4008).
+ Thanks @zencatalyst, WolleTD, @tupaschoal, @Dobiasd, @frank-weinberg, @bbolli,
+ @phprus, @waywardmonkeys, @js324 and @tchaikov.
+
+- Improved CI and tests
+ (https://github.com/fmtlib/fmt/issues/3878,
+ https://github.com/fmtlib/fmt/pull/3883,
+ https://github.com/fmtlib/fmt/issues/3897,
+ https://github.com/fmtlib/fmt/pull/3979,
+ https://github.com/fmtlib/fmt/pull/3980,
+ https://github.com/fmtlib/fmt/pull/3988,
+ https://github.com/fmtlib/fmt/pull/4010,
+ https://github.com/fmtlib/fmt/pull/4012,
+ https://github.com/fmtlib/fmt/pull/4038).
+ Thanks @vgorrX, @waywardmonkeys, @tchaikov and @phprus.
+
+- Fixed buffer overflow when using format string compilation with debug format
+ and `std::back_insert_iterator` (https://github.com/fmtlib/fmt/issues/3795,
+ https://github.com/fmtlib/fmt/pull/3797). Thanks @phprus.
+
+- Improved Bazel support
+ (https://github.com/fmtlib/fmt/pull/3792,
+ https://github.com/fmtlib/fmt/pull/3801,
+ https://github.com/fmtlib/fmt/pull/3962,
+ https://github.com/fmtlib/fmt/pull/3965). Thanks @Vertexwahn.
+
+- Improved/fixed the CMake config
+ (https://github.com/fmtlib/fmt/issues/3777,
+ https://github.com/fmtlib/fmt/pull/3783,
+ https://github.com/fmtlib/fmt/issues/3847,
+ https://github.com/fmtlib/fmt/pull/3907). Thanks @phprus and @xTachyon.
+
+- Fixed various warnings and compilation issues
+ (https://github.com/fmtlib/fmt/issues/3685,
+ https://github.com/fmtlib/fmt/issues/3769,
+ https://github.com/fmtlib/fmt/issues/3796,
+ https://github.com/fmtlib/fmt/issues/3803,
+ https://github.com/fmtlib/fmt/pull/3806,
+ https://github.com/fmtlib/fmt/pull/3807,
+ https://github.com/fmtlib/fmt/issues/3809,
+ https://github.com/fmtlib/fmt/pull/3810,
+ https://github.com/fmtlib/fmt/issues/3830,
+ https://github.com/fmtlib/fmt/pull/3832,
+ https://github.com/fmtlib/fmt/issues/3835,
+ https://github.com/fmtlib/fmt/pull/3844,
+ https://github.com/fmtlib/fmt/issues/3854,
+ https://github.com/fmtlib/fmt/pull/3856,
+ https://github.com/fmtlib/fmt/pull/3865,
+ https://github.com/fmtlib/fmt/pull/3866,
+ https://github.com/fmtlib/fmt/pull/3880,
+ https://github.com/fmtlib/fmt/issues/3881,
+ https://github.com/fmtlib/fmt/issues/3884,
+ https://github.com/fmtlib/fmt/issues/3898,
+ https://github.com/fmtlib/fmt/pull/3899,
+ https://github.com/fmtlib/fmt/pull/3909,
+ https://github.com/fmtlib/fmt/pull/3917,
+ https://github.com/fmtlib/fmt/pull/3923,
+ https://github.com/fmtlib/fmt/pull/3924,
+ https://github.com/fmtlib/fmt/issues/3925,
+ https://github.com/fmtlib/fmt/pull/3930,
+ https://github.com/fmtlib/fmt/pull/3931,
+ https://github.com/fmtlib/fmt/pull/3933,
+ https://github.com/fmtlib/fmt/issues/3935,
+ https://github.com/fmtlib/fmt/pull/3937,
+ https://github.com/fmtlib/fmt/pull/3967,
+ https://github.com/fmtlib/fmt/pull/3968,
+ https://github.com/fmtlib/fmt/pull/3972,
+ https://github.com/fmtlib/fmt/pull/3983,
+ https://github.com/fmtlib/fmt/issues/3992,
+ https://github.com/fmtlib/fmt/pull/3995,
+ https://github.com/fmtlib/fmt/pull/4009,
+ https://github.com/fmtlib/fmt/pull/4023).
+ Thanks @hmbj, @phprus, @res2k, @Baardi, @matt77hias, @waywardmonkeys, @hmbj,
+ @yakra, @prlw1, @Arghnews, @mtillmann0, @ShifftC, @eepp, @jimmy-park and
+ @ChristianGebhardt.
+
+# 10.2.1 - 2024-01-04
+
+- Fixed ABI compatibility with earlier 10.x versions
+ (https://github.com/fmtlib/fmt/issues/3785,
+ https://github.com/fmtlib/fmt/pull/3786). Thanks @saraedum.
+
+# 10.2.0 - 2024-01-01
+
+- Added support for the `%j` specifier (the number of days) for
+ `std::chrono::duration` (https://github.com/fmtlib/fmt/issues/3643,
+ https://github.com/fmtlib/fmt/pull/3732). Thanks @intelfx.
+
+- Added support for the chrono suffix for days and changed
+ the suffix for minutes from "m" to the correct "min"
+ (https://github.com/fmtlib/fmt/issues/3662,
+ https://github.com/fmtlib/fmt/pull/3664).
+ For example ([godbolt](https://godbolt.org/z/9KhMnq9ba)):
+
+ ```c++
+ #include
+
+ int main() {
+ fmt::print("{}\n", std::chrono::days(42)); // prints "42d"
+ }
+ ```
+
+ Thanks @Richardk2n.
+
+- Fixed an overflow in `std::chrono::time_point` formatting with large dates
+ (https://github.com/fmtlib/fmt/issues/3725,
+ https://github.com/fmtlib/fmt/pull/3727). Thanks @cschreib.
+
+- Added a formatter for `std::source_location`
+ (https://github.com/fmtlib/fmt/pull/3730).
+ For example ([godbolt](https://godbolt.org/z/YajfKjhhr)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ fmt::print("{}\n", std::source_location::current());
+ }
+ ```
+
+ prints
+
+ ```
+ /app/example.cpp:5:51: int main()
+ ```
+
+ Thanks @felix642.
+
+- Added a formatter for `std::bitset`
+ (https://github.com/fmtlib/fmt/pull/3660).
+ For example ([godbolt](https://godbolt.org/z/bdEaGeYxe)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ fmt::print("{}\n", std::bitset<6>(42)); // prints "101010"
+ }
+ ```
+
+ Thanks @muggenhor.
+
+- Added an experimental `nested_formatter` that provides an easy way of
+ applying a formatter to one or more subobjects while automatically handling
+ width, fill and alignment. For example:
+
+ ```c++
+ #include
+
+ struct point {
+ double x, y;
+ };
+
+ template <>
+ struct fmt::formatter : nested_formatter {
+ auto format(point p, format_context& ctx) const {
+ return write_padded(ctx, [=](auto out) {
+ return format_to(out, "({}, {})", nested(p.x), nested(p.y));
+ });
+ }
+ };
+
+ int main() {
+ fmt::print("[{:>20.2f}]", point{1, 2});
+ }
+ ```
+
+ prints
+
+ ```
+ [ (1.00, 2.00)]
+ ```
+
+- Added the generic representation (`g`) to `std::filesystem::path`
+ (https://github.com/fmtlib/fmt/issues/3715,
+ https://github.com/fmtlib/fmt/pull/3729). For example:
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ fmt::print("{:g}\n", std::filesystem::path("C:\\foo"));
+ }
+ ```
+
+ prints `"C:/foo"` on Windows.
+
+ Thanks @js324.
+
+- Made `format_as` work with references
+ (https://github.com/fmtlib/fmt/pull/3739). Thanks @tchaikov.
+
+- Fixed formatting of invalid UTF-8 with precision
+ (https://github.com/fmtlib/fmt/issues/3284).
+
+- Fixed an inconsistency between `fmt::to_string` and `fmt::format`
+ (https://github.com/fmtlib/fmt/issues/3684).
+
+- Disallowed unsafe uses of `fmt::styled`
+ (https://github.com/fmtlib/fmt/issues/3625):
+
+ ```c++
+ auto s = fmt::styled(std::string("dangle"), fmt::emphasis::bold);
+ fmt::print("{}\n", s); // compile error
+ ```
+
+ Pass `fmt::styled(...)` as a parameter instead.
+
+- Added a null check when formatting a C string with the `s` specifier
+ (https://github.com/fmtlib/fmt/issues/3706).
+
+- Disallowed the `c` specifier for `bool`
+ (https://github.com/fmtlib/fmt/issues/3726,
+ https://github.com/fmtlib/fmt/pull/3734). Thanks @js324.
+
+- Made the default formatting unlocalized in `fmt::ostream_formatter` for
+ consistency with the rest of the library
+ (https://github.com/fmtlib/fmt/issues/3460).
+
+- Fixed localized formatting in bases other than decimal
+ (https://github.com/fmtlib/fmt/issues/3693,
+ https://github.com/fmtlib/fmt/pull/3750). Thanks @js324.
+
+- Fixed a performance regression in experimental `fmt::ostream::print`
+ (https://github.com/fmtlib/fmt/issues/3674).
+
+- Added synchronization with the underlying output stream when writing to
+ the Windows console
+ (https://github.com/fmtlib/fmt/pull/3668,
+ https://github.com/fmtlib/fmt/issues/3688,
+ https://github.com/fmtlib/fmt/pull/3689).
+ Thanks @Roman-Koshelev and @dimztimz.
+
+- Changed to only export `format_error` when {fmt} is built as a shared
+ library (https://github.com/fmtlib/fmt/issues/3626,
+ https://github.com/fmtlib/fmt/pull/3627). Thanks @phprus.
+
+- Made `fmt::streamed` `constexpr`.
+ (https://github.com/fmtlib/fmt/pull/3650). Thanks @muggenhor.
+
+- Made `fmt::format_int` `constexpr`
+ (https://github.com/fmtlib/fmt/issues/4031,
+ https://github.com/fmtlib/fmt/pull/4032). Thanks @dixlorenz.
+
+- Enabled `consteval` on older versions of MSVC
+ (https://github.com/fmtlib/fmt/pull/3757). Thanks @phprus.
+
+- Added an option to build without `wchar_t` support on Windows
+ (https://github.com/fmtlib/fmt/issues/3631,
+ https://github.com/fmtlib/fmt/pull/3636). Thanks @glebm.
+
+- Improved build and CI configuration
+ (https://github.com/fmtlib/fmt/pull/3679,
+ https://github.com/fmtlib/fmt/issues/3701,
+ https://github.com/fmtlib/fmt/pull/3702,
+ https://github.com/fmtlib/fmt/pull/3749).
+ Thanks @jcar87, @pklima and @tchaikov.
+
+- Fixed various warnings, compilation and test issues
+ (https://github.com/fmtlib/fmt/issues/3607,
+ https://github.com/fmtlib/fmt/pull/3610,
+ https://github.com/fmtlib/fmt/pull/3624,
+ https://github.com/fmtlib/fmt/pull/3630,
+ https://github.com/fmtlib/fmt/pull/3634,
+ https://github.com/fmtlib/fmt/pull/3638,
+ https://github.com/fmtlib/fmt/issues/3645,
+ https://github.com/fmtlib/fmt/issues/3646,
+ https://github.com/fmtlib/fmt/pull/3647,
+ https://github.com/fmtlib/fmt/pull/3652,
+ https://github.com/fmtlib/fmt/issues/3654,
+ https://github.com/fmtlib/fmt/pull/3663,
+ https://github.com/fmtlib/fmt/issues/3670,
+ https://github.com/fmtlib/fmt/pull/3680,
+ https://github.com/fmtlib/fmt/issues/3694,
+ https://github.com/fmtlib/fmt/pull/3695,
+ https://github.com/fmtlib/fmt/pull/3699,
+ https://github.com/fmtlib/fmt/issues/3705,
+ https://github.com/fmtlib/fmt/issues/3710,
+ https://github.com/fmtlib/fmt/issues/3712,
+ https://github.com/fmtlib/fmt/pull/3713,
+ https://github.com/fmtlib/fmt/issues/3714,
+ https://github.com/fmtlib/fmt/pull/3716,
+ https://github.com/fmtlib/fmt/pull/3723,
+ https://github.com/fmtlib/fmt/issues/3738,
+ https://github.com/fmtlib/fmt/issues/3740,
+ https://github.com/fmtlib/fmt/pull/3741,
+ https://github.com/fmtlib/fmt/pull/3743,
+ https://github.com/fmtlib/fmt/issues/3745,
+ https://github.com/fmtlib/fmt/pull/3747,
+ https://github.com/fmtlib/fmt/pull/3748,
+ https://github.com/fmtlib/fmt/pull/3751,
+ https://github.com/fmtlib/fmt/pull/3754,
+ https://github.com/fmtlib/fmt/pull/3755,
+ https://github.com/fmtlib/fmt/issues/3760,
+ https://github.com/fmtlib/fmt/pull/3762,
+ https://github.com/fmtlib/fmt/issues/3763,
+ https://github.com/fmtlib/fmt/pull/3764,
+ https://github.com/fmtlib/fmt/issues/3774,
+ https://github.com/fmtlib/fmt/pull/3779).
+ Thanks @danakj, @vinayyadav3016, @cyyever, @phprus, @qimiko, @saschasc,
+ @gsjaardema, @lazka, @Zhaojun-Liu, @carlsmedstad, @hotwatermorning,
+ @cptFracassa, @kuguma, @PeterJohnson, @H1X4Dev, @asantoni, @eltociear,
+ @msimberg, @tchaikov, @waywardmonkeys.
+
+- Improved documentation and README
+ (https://github.com/fmtlib/fmt/issues/2086,
+ https://github.com/fmtlib/fmt/issues/3637,
+ https://github.com/fmtlib/fmt/pull/3642,
+ https://github.com/fmtlib/fmt/pull/3653,
+ https://github.com/fmtlib/fmt/pull/3655,
+ https://github.com/fmtlib/fmt/pull/3661,
+ https://github.com/fmtlib/fmt/issues/3673,
+ https://github.com/fmtlib/fmt/pull/3677,
+ https://github.com/fmtlib/fmt/pull/3737,
+ https://github.com/fmtlib/fmt/issues/3742,
+ https://github.com/fmtlib/fmt/pull/3744).
+ Thanks @idzm, @perlun, @joycebrum, @fennewald, @reinhardt1053, @GeorgeLS.
+
+- Updated CI dependencies
+ (https://github.com/fmtlib/fmt/pull/3615,
+ https://github.com/fmtlib/fmt/pull/3622,
+ https://github.com/fmtlib/fmt/pull/3623,
+ https://github.com/fmtlib/fmt/pull/3666,
+ https://github.com/fmtlib/fmt/pull/3696,
+ https://github.com/fmtlib/fmt/pull/3697,
+ https://github.com/fmtlib/fmt/pull/3759,
+ https://github.com/fmtlib/fmt/pull/3782).
+
+# 10.1.1 - 2023-08-28
+
+- Added formatters for `std::atomic` and `atomic_flag`
+ (https://github.com/fmtlib/fmt/pull/3574,
+ https://github.com/fmtlib/fmt/pull/3594).
+ Thanks @wangzw and @AlexGuteniev.
+- Fixed an error about partial specialization of `formatter`
+ after instantiation when compiled with gcc and C++20
+ (https://github.com/fmtlib/fmt/issues/3584).
+- Fixed compilation as a C++20 module with gcc and clang
+ (https://github.com/fmtlib/fmt/issues/3587,
+ https://github.com/fmtlib/fmt/pull/3597,
+ https://github.com/fmtlib/fmt/pull/3605).
+ Thanks @MathewBensonCode.
+- Made `fmt::to_string` work with types that have `format_as`
+ overloads (https://github.com/fmtlib/fmt/pull/3575). Thanks @phprus.
+- Made `formatted_size` work with integral format specifiers at
+ compile time (https://github.com/fmtlib/fmt/pull/3591).
+ Thanks @elbeno.
+- Fixed a warning about the `no_unique_address` attribute on clang-cl
+ (https://github.com/fmtlib/fmt/pull/3599). Thanks @lukester1975.
+- Improved compatibility with the legacy GBK encoding
+ (https://github.com/fmtlib/fmt/issues/3598,
+ https://github.com/fmtlib/fmt/pull/3599). Thanks @YuHuanTin.
+- Added OpenSSF Scorecard analysis
+ (https://github.com/fmtlib/fmt/issues/3530,
+ https://github.com/fmtlib/fmt/pull/3571). Thanks @joycebrum.
+- Updated CI dependencies
+ (https://github.com/fmtlib/fmt/pull/3591,
+ https://github.com/fmtlib/fmt/pull/3592,
+ https://github.com/fmtlib/fmt/pull/3593,
+ https://github.com/fmtlib/fmt/pull/3602).
+
+# 10.1.0 - 2023-08-12
+
+- Optimized format string compilation resulting in up to 40% speed up
+ in compiled `format_to` and \~4x speed up in compiled `format_to_n`
+ on a concatenation benchmark
+ (https://github.com/fmtlib/fmt/issues/3133,
+ https://github.com/fmtlib/fmt/issues/3484).
+
+ {fmt} 10.0:
+
+ ---------------------------------------------------------
+ Benchmark Time CPU Iterations
+ ---------------------------------------------------------
+ BM_format_to 78.9 ns 78.9 ns 8881746
+ BM_format_to_n 568 ns 568 ns 1232089
+
+ {fmt} 10.1:
+
+ ---------------------------------------------------------
+ Benchmark Time CPU Iterations
+ ---------------------------------------------------------
+ BM_format_to 54.9 ns 54.9 ns 12727944
+ BM_format_to_n 133 ns 133 ns 5257795
+
+- Optimized storage of an empty allocator in `basic_memory_buffer`
+ (https://github.com/fmtlib/fmt/pull/3485). Thanks @Minty-Meeo.
+
+- Added formatters for proxy references to elements of
+ `std::vector` and `std::bitset`
+ (https://github.com/fmtlib/fmt/issues/3567,
+ https://github.com/fmtlib/fmt/pull/3570). For example
+ ([godbolt](https://godbolt.org/z/zYb79Pvn8)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ auto v = std::vector{true};
+ fmt::print("{}", v[0]);
+ }
+ ```
+
+ Thanks @phprus and @felix642.
+
+- Fixed an ambiguous formatter specialization for containers that look
+ like container adaptors such as `boost::flat_set`
+ (https://github.com/fmtlib/fmt/issues/3556,
+ https://github.com/fmtlib/fmt/pull/3561). Thanks @5chmidti.
+
+- Fixed compilation when formatting durations not convertible from
+ `std::chrono::seconds`
+ (https://github.com/fmtlib/fmt/pull/3430). Thanks @patlkli.
+
+- Made the `formatter` specialization for `char*` const-correct
+ (https://github.com/fmtlib/fmt/pull/3432). Thanks @timsong-cpp.
+
+- Made `{}` and `{:}` handled consistently during compile-time checks
+ (https://github.com/fmtlib/fmt/issues/3526).
+
+- Disallowed passing temporaries to `make_format_args` to improve API
+ safety by preventing dangling references.
+
+- Improved the compile-time error for unformattable types
+ (https://github.com/fmtlib/fmt/pull/3478). Thanks @BRevzin.
+
+- Improved the floating-point formatter
+ (https://github.com/fmtlib/fmt/pull/3448,
+ https://github.com/fmtlib/fmt/pull/3450).
+ Thanks @florimond-collette.
+
+- Fixed handling of precision for `long double` larger than 64 bits.
+ (https://github.com/fmtlib/fmt/issues/3539,
+ https://github.com/fmtlib/fmt/issues/3564).
+
+- Made floating-point and chrono tests less platform-dependent
+ (https://github.com/fmtlib/fmt/issues/3337,
+ https://github.com/fmtlib/fmt/issues/3433,
+ https://github.com/fmtlib/fmt/pull/3434). Thanks @phprus.
+
+- Removed the remnants of the Grisu floating-point formatter that has
+ been replaced by Dragonbox in earlier versions.
+
+- Added `throw_format_error` to the public API
+ (https://github.com/fmtlib/fmt/pull/3551). Thanks @mjerabek.
+
+- Made `FMT_THROW` assert even if assertions are disabled when
+ compiling with exceptions disabled
+ (https://github.com/fmtlib/fmt/issues/3418,
+ https://github.com/fmtlib/fmt/pull/3439). Thanks @BRevzin.
+
+- Made `format_as` and `std::filesystem::path` formatter work with
+ exotic code unit types.
+ (https://github.com/fmtlib/fmt/pull/3457,
+ https://github.com/fmtlib/fmt/pull/3476). Thanks @gix and @hmbj.
+
+- Added support for the `?` format specifier to
+ `std::filesystem::path` and made the default unescaped for
+ consistency with strings.
+
+- Deprecated the wide stream overload of `printf`.
+
+- Removed unused `basic_printf_parse_context`.
+
+- Improved RTTI detection used when formatting exceptions
+ (https://github.com/fmtlib/fmt/pull/3468). Thanks @danakj.
+
+- Improved compatibility with VxWorks7
+ (https://github.com/fmtlib/fmt/pull/3467). Thanks @wenshan1.
+
+- Improved documentation
+ (https://github.com/fmtlib/fmt/issues/3174,
+ https://github.com/fmtlib/fmt/issues/3423,
+ https://github.com/fmtlib/fmt/pull/3454,
+ https://github.com/fmtlib/fmt/issues/3458,
+ https://github.com/fmtlib/fmt/pull/3461,
+ https://github.com/fmtlib/fmt/issues/3487,
+ https://github.com/fmtlib/fmt/pull/3515).
+ Thanks @zencatalyst, @rlalik and @mikecrowe.
+
+- Improved build and CI configurations
+ (https://github.com/fmtlib/fmt/issues/3449,
+ https://github.com/fmtlib/fmt/pull/3451,
+ https://github.com/fmtlib/fmt/pull/3452,
+ https://github.com/fmtlib/fmt/pull/3453,
+ https://github.com/fmtlib/fmt/pull/3459,
+ https://github.com/fmtlib/fmt/issues/3481,
+ https://github.com/fmtlib/fmt/pull/3486,
+ https://github.com/fmtlib/fmt/issues/3489,
+ https://github.com/fmtlib/fmt/pull/3496,
+ https://github.com/fmtlib/fmt/issues/3517,
+ https://github.com/fmtlib/fmt/pull/3523,
+ https://github.com/fmtlib/fmt/pull/3563).
+ Thanks @joycebrum, @glebm, @phprus, @petrmanek, @setoye and @abouvier.
+
+- Fixed various warnings and compilation issues
+ (https://github.com/fmtlib/fmt/issues/3408,
+ https://github.com/fmtlib/fmt/issues/3424,
+ https://github.com/fmtlib/fmt/issues/3444,
+ https://github.com/fmtlib/fmt/pull/3446,
+ https://github.com/fmtlib/fmt/pull/3475,
+ https://github.com/fmtlib/fmt/pull/3482,
+ https://github.com/fmtlib/fmt/issues/3492,
+ https://github.com/fmtlib/fmt/pull/3493,
+ https://github.com/fmtlib/fmt/pull/3508,
+ https://github.com/fmtlib/fmt/issues/3509,
+ https://github.com/fmtlib/fmt/issues/3533,
+ https://github.com/fmtlib/fmt/pull/3542,
+ https://github.com/fmtlib/fmt/issues/3543,
+ https://github.com/fmtlib/fmt/issues/3540,
+ https://github.com/fmtlib/fmt/pull/3544,
+ https://github.com/fmtlib/fmt/issues/3548,
+ https://github.com/fmtlib/fmt/pull/3549,
+ https://github.com/fmtlib/fmt/pull/3550,
+ https://github.com/fmtlib/fmt/pull/3552).
+ Thanks @adesitter, @hmbj, @Minty-Meeo, @phprus, @TobiSchluter,
+ @kieranclancy, @alexeedm, @jurihock, @Ozomahtli and @razaqq.
+
+# 10.0.0 - 2023-05-09
+
+- Replaced Grisu with a new floating-point formatting algorithm for
+ given precision (https://github.com/fmtlib/fmt/issues/3262,
+ https://github.com/fmtlib/fmt/issues/2750,
+ https://github.com/fmtlib/fmt/pull/3269,
+ https://github.com/fmtlib/fmt/pull/3276). The new algorithm
+ is based on Dragonbox already used for the shortest representation
+ and gives substantial performance improvement:
+
+ 
+
+ - Red: new algorithm
+ - Green: new algorithm with `FMT_USE_FULL_CACHE_DRAGONBOX` defined
+ to 1
+ - Blue: old algorithm
+
+ Thanks @jk-jeon.
+
+- Replaced `snprintf`-based hex float formatter with an internal
+ implementation (https://github.com/fmtlib/fmt/pull/3179,
+ https://github.com/fmtlib/fmt/pull/3203). This removes the
+ last usage of `s(n)printf` in {fmt}. Thanks @phprus.
+
+- Fixed alignment of floating-point numbers with localization
+ (https://github.com/fmtlib/fmt/issues/3263,
+ https://github.com/fmtlib/fmt/pull/3272). Thanks @ShawnZhong.
+
+- Made handling of `#` consistent with `std::format`.
+
+- Improved C++20 module support
+ (https://github.com/fmtlib/fmt/pull/3134,
+ https://github.com/fmtlib/fmt/pull/3254,
+ https://github.com/fmtlib/fmt/pull/3386,
+ https://github.com/fmtlib/fmt/pull/3387,
+ https://github.com/fmtlib/fmt/pull/3388,
+ https://github.com/fmtlib/fmt/pull/3392,
+ https://github.com/fmtlib/fmt/pull/3397,
+ https://github.com/fmtlib/fmt/pull/3399,
+ https://github.com/fmtlib/fmt/pull/3400).
+ Thanks @laitingsheng, @Orvid and @DanielaE.
+
+- Switched to the [modules CMake library](https://github.com/vitaut/modules)
+ which allows building {fmt} as a C++20 module with clang:
+
+ CXX=clang++ cmake -DFMT_MODULE=ON .
+ make
+
+- Made `format_as` work with any user-defined type and not just enums.
+ For example ([godbolt](https://godbolt.org/z/b7rqhq5Kh)):
+
+ ```c++
+ #include
+
+ struct floaty_mc_floatface {
+ double value;
+ };
+
+ auto format_as(floaty_mc_floatface f) { return f.value; }
+
+ int main() {
+ fmt::print("{:8}\n", floaty_mc_floatface{0.42}); // prints " 0.42"
+ }
+ ```
+
+- Removed deprecated implicit conversions for enums and conversions to
+ primitive types for compatibility with `std::format` and to prevent
+ potential ODR violations. Use `format_as` instead.
+
+- Added support for fill, align and width to the time point formatter
+ (https://github.com/fmtlib/fmt/issues/3237,
+ https://github.com/fmtlib/fmt/pull/3260,
+ https://github.com/fmtlib/fmt/pull/3275). For example
+ ([godbolt](https://godbolt.org/z/rKP6MGz6c)):
+
+ ```c++
+ #include
+
+ int main() {
+ // prints " 2023"
+ fmt::print("{:>8%Y}\n", std::chrono::system_clock::now());
+ }
+ ```
+
+ Thanks @ShawnZhong.
+
+- Implemented formatting of subseconds
+ (https://github.com/fmtlib/fmt/issues/2207,
+ https://github.com/fmtlib/fmt/issues/3117,
+ https://github.com/fmtlib/fmt/pull/3115,
+ https://github.com/fmtlib/fmt/pull/3143,
+ https://github.com/fmtlib/fmt/pull/3144,
+ https://github.com/fmtlib/fmt/pull/3349). For example
+ ([godbolt](https://godbolt.org/z/45738oGEo)):
+
+ ```c++
+ #include
+
+ int main() {
+ // prints 01.234567
+ fmt::print("{:%S}\n", std::chrono::microseconds(1234567));
+ }
+ ```
+
+ Thanks @patrickroocks @phprus and @BRevzin.
+
+- Added precision support to `%S`
+ (https://github.com/fmtlib/fmt/pull/3148). Thanks @SappyJoy
+
+- Added support for `std::utc_time`
+ (https://github.com/fmtlib/fmt/issues/3098,
+ https://github.com/fmtlib/fmt/pull/3110). Thanks @patrickroocks.
+
+- Switched formatting of `std::chrono::system_clock` from local time
+ to UTC for compatibility with the standard
+ (https://github.com/fmtlib/fmt/issues/3199,
+ https://github.com/fmtlib/fmt/pull/3230). Thanks @ned14.
+
+- Added support for `%Ez` and `%Oz` to chrono formatters.
+ (https://github.com/fmtlib/fmt/issues/3220,
+ https://github.com/fmtlib/fmt/pull/3222). Thanks @phprus.
+
+- Improved validation of format specifiers for `std::chrono::duration`
+ (https://github.com/fmtlib/fmt/issues/3219,
+ https://github.com/fmtlib/fmt/pull/3232). Thanks @ShawnZhong.
+
+- Fixed formatting of time points before the epoch
+ (https://github.com/fmtlib/fmt/issues/3117,
+ https://github.com/fmtlib/fmt/pull/3261). For example
+ ([godbolt](https://godbolt.org/z/f7bcznb3W)):
+
+ ```c++
+ #include
+
+ int main() {
+ auto t = std::chrono::system_clock::from_time_t(0) -
+ std::chrono::milliseconds(250);
+ fmt::print("{:%S}\n", t); // prints 59.750000000
+ }
+ ```
+
+ Thanks @ShawnZhong.
+
+- Experimental: implemented glibc extension for padding seconds,
+ minutes and hours
+ (https://github.com/fmtlib/fmt/issues/2959,
+ https://github.com/fmtlib/fmt/pull/3271). Thanks @ShawnZhong.
+
+- Added a formatter for `std::exception`
+ (https://github.com/fmtlib/fmt/issues/2977,
+ https://github.com/fmtlib/fmt/issues/3012,
+ https://github.com/fmtlib/fmt/pull/3062,
+ https://github.com/fmtlib/fmt/pull/3076,
+ https://github.com/fmtlib/fmt/pull/3119). For example
+ ([godbolt](https://godbolt.org/z/8xoWGs9e4)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ try {
+ std::vector().at(0);
+ } catch(const std::exception& e) {
+ fmt::print("{}", e);
+ }
+ }
+ ```
+
+ prints:
+
+ vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)
+
+ on libstdc++. Thanks @zach2good and @phprus.
+
+- Moved `std::error_code` formatter from `fmt/os.h` to `fmt/std.h`.
+ (https://github.com/fmtlib/fmt/pull/3125). Thanks @phprus.
+
+- Added formatters for standard container adapters:
+ `std::priority_queue`, `std::queue` and `std::stack`
+ (https://github.com/fmtlib/fmt/issues/3215,
+ https://github.com/fmtlib/fmt/pull/3279). For example
+ ([godbolt](https://godbolt.org/z/74h1xY9qK)):
+
+ ```c++
+ #include
+ #include
+ #include
+
+ int main() {
+ auto s = std::stack>();
+ for (auto b: {true, false, true}) s.push(b);
+ fmt::print("{}\n", s); // prints [true, false, true]
+ }
+ ```
+
+ Thanks @ShawnZhong.
+
+- Added a formatter for `std::optional` to `fmt/std.h`
+ (https://github.com/fmtlib/fmt/issues/1367,
+ https://github.com/fmtlib/fmt/pull/3303).
+ Thanks @tom-huntington.
+
+- Fixed formatting of valueless by exception variants
+ (https://github.com/fmtlib/fmt/pull/3347). Thanks @TheOmegaCarrot.
+
+- Made `fmt::ptr` accept `unique_ptr` with a custom deleter
+ (https://github.com/fmtlib/fmt/pull/3177). Thanks @hmbj.
+
+- Fixed formatting of noncopyable ranges and nested ranges of chars
+ (https://github.com/fmtlib/fmt/pull/3158
+ https://github.com/fmtlib/fmt/issues/3286,
+ https://github.com/fmtlib/fmt/pull/3290). Thanks @BRevzin.
+
+- Fixed issues with formatting of paths and ranges of paths
+ (https://github.com/fmtlib/fmt/issues/3319,
+ https://github.com/fmtlib/fmt/pull/3321
+ https://github.com/fmtlib/fmt/issues/3322). Thanks @phprus.
+
+- Improved handling of invalid Unicode in paths.
+
+- Enabled compile-time checks on Apple clang 14 and later
+ (https://github.com/fmtlib/fmt/pull/3331). Thanks @cloyce.
+
+- Improved compile-time checks of named arguments
+ (https://github.com/fmtlib/fmt/issues/3105,
+ https://github.com/fmtlib/fmt/pull/3214). Thanks @rbrich.
+
+- Fixed formatting when both alignment and `0` are given
+ (https://github.com/fmtlib/fmt/issues/3236,
+ https://github.com/fmtlib/fmt/pull/3248). Thanks @ShawnZhong.
+
+- Improved Unicode support in the experimental file API on Windows
+ (https://github.com/fmtlib/fmt/issues/3234,
+ https://github.com/fmtlib/fmt/pull/3293). Thanks @Fros1er.
+
+- Unified UTF transcoding
+ (https://github.com/fmtlib/fmt/pull/3416). Thanks @phprus.
+
+- Added support for UTF-8 digit separators via an experimental locale
+ facet (https://github.com/fmtlib/fmt/issues/1861). For
+ example ([godbolt](https://godbolt.org/z/f7bcznb3W)):
+
+ ```c++
+ auto loc = std::locale(
+ std::locale(), new fmt::format_facet("โ"));
+ auto s = fmt::format(loc, "{:L}", 1000);
+ ```
+
+ where `โ` is U+2019 used as a digit separator in the de_CH locale.
+
+- Added an overload of `formatted_size` that takes a locale
+ (https://github.com/fmtlib/fmt/issues/3084,
+ https://github.com/fmtlib/fmt/pull/3087). Thanks @gerboengels.
+
+- Removed the deprecated `FMT_DEPRECATED_OSTREAM`.
+
+- Fixed a UB when using a null `std::string_view` with
+ `fmt::to_string` or format string compilation
+ (https://github.com/fmtlib/fmt/issues/3241,
+ https://github.com/fmtlib/fmt/pull/3244). Thanks @phprus.
+
+- Added `starts_with` to the fallback `string_view` implementation
+ (https://github.com/fmtlib/fmt/pull/3080). Thanks @phprus.
+
+- Added `fmt::basic_format_string::get()` for compatibility with
+ `basic_format_string`
+ (https://github.com/fmtlib/fmt/pull/3111). Thanks @huangqinjin.
+
+- Added `println` for compatibility with C++23
+ (https://github.com/fmtlib/fmt/pull/3267). Thanks @ShawnZhong.
+
+- Renamed the `FMT_EXPORT` macro for shared library usage to
+ `FMT_LIB_EXPORT`.
+
+- Improved documentation
+ (https://github.com/fmtlib/fmt/issues/3108,
+ https://github.com/fmtlib/fmt/issues/3169,
+ https://github.com/fmtlib/fmt/pull/3243).
+ https://github.com/fmtlib/fmt/pull/3404,
+ https://github.com/fmtlib/fmt/pull/4002).
+ Thanks @Cleroth, @Vertexwahn and @yujincheng08.
+
+- Improved build configuration and tests
+ (https://github.com/fmtlib/fmt/pull/3118,
+ https://github.com/fmtlib/fmt/pull/3120,
+ https://github.com/fmtlib/fmt/pull/3188,
+ https://github.com/fmtlib/fmt/issues/3189,
+ https://github.com/fmtlib/fmt/pull/3198,
+ https://github.com/fmtlib/fmt/pull/3205,
+ https://github.com/fmtlib/fmt/pull/3207,
+ https://github.com/fmtlib/fmt/pull/3210,
+ https://github.com/fmtlib/fmt/pull/3240,
+ https://github.com/fmtlib/fmt/pull/3256,
+ https://github.com/fmtlib/fmt/pull/3264,
+ https://github.com/fmtlib/fmt/issues/3299,
+ https://github.com/fmtlib/fmt/pull/3302,
+ https://github.com/fmtlib/fmt/pull/3312,
+ https://github.com/fmtlib/fmt/issues/3317,
+ https://github.com/fmtlib/fmt/pull/3328,
+ https://github.com/fmtlib/fmt/pull/3333,
+ https://github.com/fmtlib/fmt/pull/3369,
+ https://github.com/fmtlib/fmt/issues/3373,
+ https://github.com/fmtlib/fmt/pull/3395,
+ https://github.com/fmtlib/fmt/pull/3406,
+ https://github.com/fmtlib/fmt/pull/3411).
+ Thanks @dimztimz, @phprus, @DavidKorczynski, @ChrisThrasher,
+ @FrancoisCarouge, @kennyweiss, @luzpaz, @codeinred, @Mixaill, @joycebrum,
+ @kevinhwang and @Vertexwahn.
+
+- Fixed a regression in handling empty format specifiers after a colon
+ (`{:}`) (https://github.com/fmtlib/fmt/pull/3086). Thanks @oxidase.
+
+- Worked around a broken implementation of
+ `std::is_constant_evaluated` in some versions of libstdc++ on clang
+ (https://github.com/fmtlib/fmt/issues/3247,
+ https://github.com/fmtlib/fmt/pull/3281). Thanks @phprus.
+
+- Fixed formatting of volatile variables
+ (https://github.com/fmtlib/fmt/pull/3068).
+
+- Fixed various warnings and compilation issues
+ (https://github.com/fmtlib/fmt/pull/3057,
+ https://github.com/fmtlib/fmt/pull/3066,
+ https://github.com/fmtlib/fmt/pull/3072,
+ https://github.com/fmtlib/fmt/pull/3082,
+ https://github.com/fmtlib/fmt/pull/3091,
+ https://github.com/fmtlib/fmt/issues/3092,
+ https://github.com/fmtlib/fmt/pull/3093,
+ https://github.com/fmtlib/fmt/pull/3095,
+ https://github.com/fmtlib/fmt/issues/3096,
+ https://github.com/fmtlib/fmt/pull/3097,
+ https://github.com/fmtlib/fmt/issues/3128,
+ https://github.com/fmtlib/fmt/pull/3129,
+ https://github.com/fmtlib/fmt/pull/3137,
+ https://github.com/fmtlib/fmt/pull/3139,
+ https://github.com/fmtlib/fmt/issues/3140,
+ https://github.com/fmtlib/fmt/pull/3142,
+ https://github.com/fmtlib/fmt/issues/3149,
+ https://github.com/fmtlib/fmt/pull/3150,
+ https://github.com/fmtlib/fmt/issues/3154,
+ https://github.com/fmtlib/fmt/issues/3163,
+ https://github.com/fmtlib/fmt/issues/3178,
+ https://github.com/fmtlib/fmt/pull/3184,
+ https://github.com/fmtlib/fmt/pull/3196,
+ https://github.com/fmtlib/fmt/issues/3204,
+ https://github.com/fmtlib/fmt/pull/3206,
+ https://github.com/fmtlib/fmt/pull/3208,
+ https://github.com/fmtlib/fmt/issues/3213,
+ https://github.com/fmtlib/fmt/pull/3216,
+ https://github.com/fmtlib/fmt/issues/3224,
+ https://github.com/fmtlib/fmt/issues/3226,
+ https://github.com/fmtlib/fmt/issues/3228,
+ https://github.com/fmtlib/fmt/pull/3229,
+ https://github.com/fmtlib/fmt/pull/3259,
+ https://github.com/fmtlib/fmt/issues/3274,
+ https://github.com/fmtlib/fmt/issues/3287,
+ https://github.com/fmtlib/fmt/pull/3288,
+ https://github.com/fmtlib/fmt/issues/3292,
+ https://github.com/fmtlib/fmt/pull/3295,
+ https://github.com/fmtlib/fmt/pull/3296,
+ https://github.com/fmtlib/fmt/issues/3298,
+ https://github.com/fmtlib/fmt/issues/3325,
+ https://github.com/fmtlib/fmt/pull/3326,
+ https://github.com/fmtlib/fmt/issues/3334,
+ https://github.com/fmtlib/fmt/issues/3342,
+ https://github.com/fmtlib/fmt/pull/3343,
+ https://github.com/fmtlib/fmt/issues/3351,
+ https://github.com/fmtlib/fmt/pull/3352,
+ https://github.com/fmtlib/fmt/pull/3362,
+ https://github.com/fmtlib/fmt/issues/3365,
+ https://github.com/fmtlib/fmt/pull/3366,
+ https://github.com/fmtlib/fmt/pull/3374,
+ https://github.com/fmtlib/fmt/issues/3377,
+ https://github.com/fmtlib/fmt/pull/3378,
+ https://github.com/fmtlib/fmt/issues/3381,
+ https://github.com/fmtlib/fmt/pull/3398,
+ https://github.com/fmtlib/fmt/pull/3413,
+ https://github.com/fmtlib/fmt/issues/3415).
+ Thanks @phprus, @gsjaardema, @NewbieOrange, @EngineLessCC, @asmaloney,
+ @HazardyKnusperkeks, @sergiud, @Youw, @thesmurph, @czudziakm,
+ @Roman-Koshelev, @chronoxor, @ShawnZhong, @russelltg, @glebm, @tmartin-gh,
+ @Zhaojun-Liu, @louiswins and @mogemimi.
+
+# 9.1.0 - 2022-08-27
+
+- `fmt::formatted_size` now works at compile time
+ (https://github.com/fmtlib/fmt/pull/3026). For example
+ ([godbolt](https://godbolt.org/z/1MW5rMdf8)):
+
+ ```c++
+ #include
+
+ int main() {
+ using namespace fmt::literals;
+ constexpr size_t n = fmt::formatted_size("{}"_cf, 42);
+ fmt::print("{}\n", n); // prints 2
+ }
+ ```
+
+ Thanks @marksantaniello.
+
+- Fixed handling of invalid UTF-8
+ (https://github.com/fmtlib/fmt/pull/3038,
+ https://github.com/fmtlib/fmt/pull/3044,
+ https://github.com/fmtlib/fmt/pull/3056).
+ Thanks @phprus and @skeeto.
+
+- Improved Unicode support in `ostream` overloads of `print`
+ (https://github.com/fmtlib/fmt/pull/2994,
+ https://github.com/fmtlib/fmt/pull/3001,
+ https://github.com/fmtlib/fmt/pull/3025). Thanks @dimztimz.
+
+- Fixed handling of the sign specifier in localized formatting on
+ systems with 32-bit `wchar_t`
+ (https://github.com/fmtlib/fmt/issues/3041).
+
+- Added support for wide streams to `fmt::streamed`
+ (https://github.com/fmtlib/fmt/pull/2994). Thanks @phprus.
+
+- Added the `n` specifier that disables the output of delimiters when
+ formatting ranges (https://github.com/fmtlib/fmt/pull/2981,
+ https://github.com/fmtlib/fmt/pull/2983). For example
+ ([godbolt](https://godbolt.org/z/roKqGdj8c)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ auto v = std::vector{1, 2, 3};
+ fmt::print("{:n}\n", v); // prints 1, 2, 3
+ }
+ ```
+
+ Thanks @BRevzin.
+
+- Worked around problematic `std::string_view` constructors introduced
+ in C++23 (https://github.com/fmtlib/fmt/issues/3030,
+ https://github.com/fmtlib/fmt/issues/3050). Thanks @strega-nil-ms.
+
+- Improve handling (exclusion) of recursive ranges
+ (https://github.com/fmtlib/fmt/issues/2968,
+ https://github.com/fmtlib/fmt/pull/2974). Thanks @Dani-Hub.
+
+- Improved error reporting in format string compilation
+ (https://github.com/fmtlib/fmt/issues/3055).
+
+- Improved the implementation of
+ [Dragonbox](https://github.com/jk-jeon/dragonbox), the algorithm
+ used for the default floating-point formatting
+ (https://github.com/fmtlib/fmt/pull/2984). Thanks @jk-jeon.
+
+- Fixed issues with floating-point formatting on exotic platforms.
+
+- Improved the implementation of chrono formatting
+ (https://github.com/fmtlib/fmt/pull/3010). Thanks @phprus.
+
+- Improved documentation
+ (https://github.com/fmtlib/fmt/pull/2966,
+ https://github.com/fmtlib/fmt/pull/3009,
+ https://github.com/fmtlib/fmt/issues/3020,
+ https://github.com/fmtlib/fmt/pull/3037).
+ Thanks @mwinterb, @jcelerier and @remiburtin.
+
+- Improved build configuration
+ (https://github.com/fmtlib/fmt/pull/2991,
+ https://github.com/fmtlib/fmt/pull/2995,
+ https://github.com/fmtlib/fmt/issues/3004,
+ https://github.com/fmtlib/fmt/pull/3007,
+ https://github.com/fmtlib/fmt/pull/3040).
+ Thanks @dimztimz and @hwhsu1231.
+
+- Fixed various warnings and compilation issues
+ (https://github.com/fmtlib/fmt/issues/2969,
+ https://github.com/fmtlib/fmt/pull/2971,
+ https://github.com/fmtlib/fmt/issues/2975,
+ https://github.com/fmtlib/fmt/pull/2982,
+ https://github.com/fmtlib/fmt/pull/2985,
+ https://github.com/fmtlib/fmt/issues/2988,
+ https://github.com/fmtlib/fmt/issues/2989,
+ https://github.com/fmtlib/fmt/issues/3000,
+ https://github.com/fmtlib/fmt/issues/3006,
+ https://github.com/fmtlib/fmt/issues/3014,
+ https://github.com/fmtlib/fmt/issues/3015,
+ https://github.com/fmtlib/fmt/pull/3021,
+ https://github.com/fmtlib/fmt/issues/3023,
+ https://github.com/fmtlib/fmt/pull/3024,
+ https://github.com/fmtlib/fmt/pull/3029,
+ https://github.com/fmtlib/fmt/pull/3043,
+ https://github.com/fmtlib/fmt/issues/3052,
+ https://github.com/fmtlib/fmt/pull/3053,
+ https://github.com/fmtlib/fmt/pull/3054).
+ Thanks @h-friederich, @dimztimz, @olupton, @bernhardmgruber and @phprus.
+
+# 9.0.0 - 2022-07-04
+
+- Switched to the internal floating point formatter for all decimal
+ presentation formats. In particular this results in consistent
+ rounding on all platforms and removing the `s[n]printf` fallback for
+ decimal FP formatting.
+
+- Compile-time floating point formatting no longer requires the
+ header-only mode. For example
+ ([godbolt](https://godbolt.org/z/G37PTeG3b)):
+
+ ```c++
+ #include
+ #include
+
+ consteval auto compile_time_dtoa(double value) -> std::array {
+ auto result = std::array();
+ fmt::format_to(result.data(), FMT_COMPILE("{}"), value);
+ return result;
+ }
+
+ constexpr auto answer = compile_time_dtoa(0.42);
+ ```
+
+ works with the default settings.
+
+- Improved the implementation of
+ [Dragonbox](https://github.com/jk-jeon/dragonbox), the algorithm
+ used for the default floating-point formatting
+ (https://github.com/fmtlib/fmt/pull/2713,
+ https://github.com/fmtlib/fmt/pull/2750). Thanks @jk-jeon.
+
+- Made `fmt::to_string` work with `__float128`. This uses the internal
+ FP formatter and works even on system without `__float128` support
+ in `[s]printf`.
+
+- Disabled automatic `std::ostream` insertion operator (`operator<<`)
+ discovery when `fmt/ostream.h` is included to prevent ODR
+ violations. You can get the old behavior by defining
+ `FMT_DEPRECATED_OSTREAM` but this will be removed in the next major
+ release. Use `fmt::streamed` or `fmt::ostream_formatter` to enable
+ formatting via `std::ostream` instead.
+
+- Added `fmt::ostream_formatter` that can be used to write `formatter`
+ specializations that perform formatting via `std::ostream`. For
+ example ([godbolt](https://godbolt.org/z/5sEc5qMsf)):
+
+ ```c++
+ #include
+
+ struct date {
+ int year, month, day;
+
+ friend std::ostream& operator<<(std::ostream& os, const date& d) {
+ return os << d.year << '-' << d.month << '-' << d.day;
+ }
+ };
+
+ template <> struct fmt::formatter : ostream_formatter {};
+
+ std::string s = fmt::format("The date is {}", date{2012, 12, 9});
+ // s == "The date is 2012-12-9"
+ ```
+
+- Added the `fmt::streamed` function that takes an object and formats
+ it via `std::ostream`. For example
+ ([godbolt](https://godbolt.org/z/5G3346G1f)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ fmt::print("Current thread id: {}\n",
+ fmt::streamed(std::this_thread::get_id()));
+ }
+ ```
+
+ Note that `fmt/std.h` provides a `formatter` specialization for
+ `std::thread::id` so you don\'t need to format it via
+ `std::ostream`.
+
+- Deprecated implicit conversions of unscoped enums to integers for
+ consistency with scoped enums.
+
+- Added an argument-dependent lookup based `format_as` extension API
+ to simplify formatting of enums.
+
+- Added experimental `std::variant` formatting support
+ (https://github.com/fmtlib/fmt/pull/2941). For example
+ ([godbolt](https://godbolt.org/z/KG9z6cq68)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ auto v = std::variant(42);
+ fmt::print("{}\n", v);
+ }
+ ```
+
+ prints:
+
+ variant(42)
+
+ Thanks @jehelset.
+
+- Added experimental `std::filesystem::path` formatting support
+ (https://github.com/fmtlib/fmt/issues/2865,
+ https://github.com/fmtlib/fmt/pull/2902,
+ https://github.com/fmtlib/fmt/issues/2917,
+ https://github.com/fmtlib/fmt/pull/2918). For example
+ ([godbolt](https://godbolt.org/z/o44dMexEb)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ fmt::print("There is no place like {}.", std::filesystem::path("/home"));
+ }
+ ```
+
+ prints:
+
+ There is no place like "/home".
+
+ Thanks @phprus.
+
+- Added a `std::thread::id` formatter to `fmt/std.h`. For example
+ ([godbolt](https://godbolt.org/z/j1azbYf3E)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ fmt::print("Current thread id: {}\n", std::this_thread::get_id());
+ }
+ ```
+
+- Added `fmt::styled` that applies a text style to an individual
+ argument (https://github.com/fmtlib/fmt/pull/2793). For
+ example ([godbolt](https://godbolt.org/z/vWGW7v5M6)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ auto now = std::chrono::system_clock::now();
+ fmt::print(
+ "[{}] {}: {}\n",
+ fmt::styled(now, fmt::emphasis::bold),
+ fmt::styled("error", fg(fmt::color::red)),
+ "something went wrong");
+ }
+ ```
+
+ prints
+
+ 
+
+ Thanks @rbrugo.
+
+- Made `fmt::print` overload for text styles correctly handle UTF-8
+ (https://github.com/fmtlib/fmt/issues/2681,
+ https://github.com/fmtlib/fmt/pull/2701). Thanks @AlexGuteniev.
+
+- Fixed Unicode handling when writing to an ostream.
+
+- Added support for nested specifiers to range formatting
+ (https://github.com/fmtlib/fmt/pull/2673). For example
+ ([godbolt](https://godbolt.org/z/xd3Gj38cf)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ fmt::print("{::#x}\n", std::vector{10, 20, 30});
+ }
+ ```
+
+ prints `[0xa, 0x14, 0x1e]`.
+
+ Thanks @BRevzin.
+
+- Implemented escaping of wide strings in ranges
+ (https://github.com/fmtlib/fmt/pull/2904). Thanks @phprus.
+
+- Added support for ranges with `begin` / `end` found via the
+ argument-dependent lookup
+ (https://github.com/fmtlib/fmt/pull/2807). Thanks @rbrugo.
+
+- Fixed formatting of certain kinds of ranges of ranges
+ (https://github.com/fmtlib/fmt/pull/2787). Thanks @BRevzin.
+
+- Fixed handling of maps with element types other than `std::pair`
+ (https://github.com/fmtlib/fmt/pull/2944). Thanks @BrukerJWD.
+
+- Made tuple formatter enabled only if elements are formattable
+ (https://github.com/fmtlib/fmt/issues/2939,
+ https://github.com/fmtlib/fmt/pull/2940). Thanks @jehelset.
+
+- Made `fmt::join` compatible with format string compilation
+ (https://github.com/fmtlib/fmt/issues/2719,
+ https://github.com/fmtlib/fmt/pull/2720). Thanks @phprus.
+
+- Made compile-time checks work with named arguments of custom types
+ and `std::ostream` `print` overloads
+ (https://github.com/fmtlib/fmt/issues/2816,
+ https://github.com/fmtlib/fmt/issues/2817,
+ https://github.com/fmtlib/fmt/pull/2819). Thanks @timsong-cpp.
+
+- Removed `make_args_checked` because it is no longer needed for
+ compile-time checks
+ (https://github.com/fmtlib/fmt/pull/2760). Thanks @phprus.
+
+- Removed the following deprecated APIs: `_format`, `arg_join`, the
+ `format_to` overload that takes a memory buffer, `[v]fprintf` that
+ takes an `ostream`.
+
+- Removed the deprecated implicit conversion of `[const] signed char*`
+ and `[const] unsigned char*` to C strings.
+
+- Removed the deprecated `fmt/locale.h`.
+
+- Replaced the deprecated `fileno()` with `descriptor()` in
+ `buffered_file`.
+
+- Moved `to_string_view` to the `detail` namespace since it\'s an
+ implementation detail.
+
+- Made access mode of a created file consistent with `fopen` by
+ setting `S_IWGRP` and `S_IWOTH`
+ (https://github.com/fmtlib/fmt/pull/2733). Thanks @arogge.
+
+- Removed a redundant buffer resize when formatting to `std::ostream`
+ (https://github.com/fmtlib/fmt/issues/2842,
+ https://github.com/fmtlib/fmt/pull/2843). Thanks @jcelerier.
+
+- Made precision computation for strings consistent with width
+ (https://github.com/fmtlib/fmt/issues/2888).
+
+- Fixed handling of locale separators in floating point formatting
+ (https://github.com/fmtlib/fmt/issues/2830).
+
+- Made sign specifiers work with `__int128_t`
+ (https://github.com/fmtlib/fmt/issues/2773).
+
+- Improved support for systems such as CHERI with extra data stored in
+ pointers (https://github.com/fmtlib/fmt/pull/2932).
+ Thanks @davidchisnall.
+
+- Improved documentation
+ (https://github.com/fmtlib/fmt/pull/2706,
+ https://github.com/fmtlib/fmt/pull/2712,
+ https://github.com/fmtlib/fmt/pull/2789,
+ https://github.com/fmtlib/fmt/pull/2803,
+ https://github.com/fmtlib/fmt/pull/2805,
+ https://github.com/fmtlib/fmt/pull/2815,
+ https://github.com/fmtlib/fmt/pull/2924).
+ Thanks @BRevzin, @Pokechu22, @setoye, @rtobar, @rbrugo, @anoonD and
+ @leha-bot.
+
+- Improved build configuration
+ (https://github.com/fmtlib/fmt/pull/2766,
+ https://github.com/fmtlib/fmt/pull/2772,
+ https://github.com/fmtlib/fmt/pull/2836,
+ https://github.com/fmtlib/fmt/pull/2852,
+ https://github.com/fmtlib/fmt/pull/2907,
+ https://github.com/fmtlib/fmt/pull/2913,
+ https://github.com/fmtlib/fmt/pull/2914).
+ Thanks @kambala-decapitator, @mattiasljungstrom, @kieselnb, @nathannaveen
+ and @Vertexwahn.
+
+- Fixed various warnings and compilation issues
+ (https://github.com/fmtlib/fmt/issues/2408,
+ https://github.com/fmtlib/fmt/issues/2507,
+ https://github.com/fmtlib/fmt/issues/2697,
+ https://github.com/fmtlib/fmt/issues/2715,
+ https://github.com/fmtlib/fmt/issues/2717,
+ https://github.com/fmtlib/fmt/pull/2722,
+ https://github.com/fmtlib/fmt/pull/2724,
+ https://github.com/fmtlib/fmt/pull/2725,
+ https://github.com/fmtlib/fmt/issues/2726,
+ https://github.com/fmtlib/fmt/pull/2728,
+ https://github.com/fmtlib/fmt/pull/2732,
+ https://github.com/fmtlib/fmt/issues/2738,
+ https://github.com/fmtlib/fmt/pull/2742,
+ https://github.com/fmtlib/fmt/issues/2744,
+ https://github.com/fmtlib/fmt/issues/2745,
+ https://github.com/fmtlib/fmt/issues/2746,
+ https://github.com/fmtlib/fmt/issues/2754,
+ https://github.com/fmtlib/fmt/pull/2755,
+ https://github.com/fmtlib/fmt/issues/2757,
+ https://github.com/fmtlib/fmt/pull/2758,
+ https://github.com/fmtlib/fmt/issues/2761,
+ https://github.com/fmtlib/fmt/pull/2762,
+ https://github.com/fmtlib/fmt/issues/2763,
+ https://github.com/fmtlib/fmt/pull/2765,
+ https://github.com/fmtlib/fmt/issues/2769,
+ https://github.com/fmtlib/fmt/pull/2770,
+ https://github.com/fmtlib/fmt/issues/2771,
+ https://github.com/fmtlib/fmt/issues/2777,
+ https://github.com/fmtlib/fmt/pull/2779,
+ https://github.com/fmtlib/fmt/pull/2782,
+ https://github.com/fmtlib/fmt/pull/2783,
+ https://github.com/fmtlib/fmt/issues/2794,
+ https://github.com/fmtlib/fmt/issues/2796,
+ https://github.com/fmtlib/fmt/pull/2797,
+ https://github.com/fmtlib/fmt/pull/2801,
+ https://github.com/fmtlib/fmt/pull/2802,
+ https://github.com/fmtlib/fmt/issues/2808,
+ https://github.com/fmtlib/fmt/issues/2818,
+ https://github.com/fmtlib/fmt/pull/2819,
+ https://github.com/fmtlib/fmt/issues/2829,
+ https://github.com/fmtlib/fmt/issues/2835,
+ https://github.com/fmtlib/fmt/issues/2848,
+ https://github.com/fmtlib/fmt/issues/2860,
+ https://github.com/fmtlib/fmt/pull/2861,
+ https://github.com/fmtlib/fmt/pull/2882,
+ https://github.com/fmtlib/fmt/issues/2886,
+ https://github.com/fmtlib/fmt/issues/2891,
+ https://github.com/fmtlib/fmt/pull/2892,
+ https://github.com/fmtlib/fmt/issues/2895,
+ https://github.com/fmtlib/fmt/issues/2896,
+ https://github.com/fmtlib/fmt/pull/2903,
+ https://github.com/fmtlib/fmt/issues/2906,
+ https://github.com/fmtlib/fmt/issues/2908,
+ https://github.com/fmtlib/fmt/pull/2909,
+ https://github.com/fmtlib/fmt/issues/2920,
+ https://github.com/fmtlib/fmt/pull/2922,
+ https://github.com/fmtlib/fmt/pull/2927,
+ https://github.com/fmtlib/fmt/pull/2929,
+ https://github.com/fmtlib/fmt/issues/2936,
+ https://github.com/fmtlib/fmt/pull/2937,
+ https://github.com/fmtlib/fmt/pull/2938,
+ https://github.com/fmtlib/fmt/pull/2951,
+ https://github.com/fmtlib/fmt/issues/2954,
+ https://github.com/fmtlib/fmt/pull/2957,
+ https://github.com/fmtlib/fmt/issues/2958,
+ https://github.com/fmtlib/fmt/pull/2960).
+ Thanks @matrackif @Tobi823, @ivan-volnov, @VasiliPupkin256,
+ @federico-busato, @barcharcraz, @jk-jeon, @HazardyKnusperkeks, @dalboris,
+ @seanm, @gsjaardema, @timsong-cpp, @seanm, @frithrah, @chronoxor, @Agga,
+ @madmaxoft, @JurajX, @phprus and @Dani-Hub.
+
+# 8.1.1 - 2022-01-06
+
+- Restored ABI compatibility with version 8.0.x
+ (https://github.com/fmtlib/fmt/issues/2695,
+ https://github.com/fmtlib/fmt/pull/2696). Thanks @saraedum.
+- Fixed chrono formatting on big endian systems
+ (https://github.com/fmtlib/fmt/issues/2698,
+ https://github.com/fmtlib/fmt/pull/2699).
+ Thanks @phprus and @xvitaly.
+- Fixed a linkage error with mingw
+ (https://github.com/fmtlib/fmt/issues/2691,
+ https://github.com/fmtlib/fmt/pull/2692). Thanks @rbberger.
+
+# 8.1.0 - 2022-01-02
+
+- Optimized chrono formatting
+ (https://github.com/fmtlib/fmt/pull/2500,
+ https://github.com/fmtlib/fmt/pull/2537,
+ https://github.com/fmtlib/fmt/issues/2541,
+ https://github.com/fmtlib/fmt/pull/2544,
+ https://github.com/fmtlib/fmt/pull/2550,
+ https://github.com/fmtlib/fmt/pull/2551,
+ https://github.com/fmtlib/fmt/pull/2576,
+ https://github.com/fmtlib/fmt/issues/2577,
+ https://github.com/fmtlib/fmt/pull/2586,
+ https://github.com/fmtlib/fmt/pull/2591,
+ https://github.com/fmtlib/fmt/pull/2594,
+ https://github.com/fmtlib/fmt/pull/2602,
+ https://github.com/fmtlib/fmt/pull/2617,
+ https://github.com/fmtlib/fmt/issues/2628,
+ https://github.com/fmtlib/fmt/pull/2633,
+ https://github.com/fmtlib/fmt/issues/2670,
+ https://github.com/fmtlib/fmt/pull/2671).
+
+ Processing of some specifiers such as `%z` and `%Y` is now up to
+ 10-20 times faster, for example on GCC 11 with libstdc++:
+
+ ----------------------------------------------------------------------------
+ Benchmark Before After
+ ----------------------------------------------------------------------------
+ FMTFormatter_z 261 ns 26.3 ns
+ FMTFormatterCompile_z 246 ns 11.6 ns
+ FMTFormatter_Y 263 ns 26.1 ns
+ FMTFormatterCompile_Y 244 ns 10.5 ns
+ ----------------------------------------------------------------------------
+
+ Thanks @phprus and @toughengineer.
+
+- Implemented subsecond formatting for chrono durations
+ (https://github.com/fmtlib/fmt/pull/2623). For example
+ ([godbolt](https://godbolt.org/z/es7vWTETe)):
+
+ ```c++
+ #include
+
+ int main() {
+ fmt::print("{:%S}", std::chrono::milliseconds(1234));
+ }
+ ```
+
+ prints \"01.234\".
+
+ Thanks @matrackif.
+
+- Fixed handling of precision 0 when formatting chrono durations
+ (https://github.com/fmtlib/fmt/issues/2587,
+ https://github.com/fmtlib/fmt/pull/2588). Thanks @lukester1975.
+
+- Fixed an overflow on invalid inputs in the `tm` formatter
+ (https://github.com/fmtlib/fmt/pull/2564). Thanks @phprus.
+
+- Added `fmt::group_digits` that formats integers with a non-localized
+ digit separator (comma) for groups of three digits. For example
+ ([godbolt](https://godbolt.org/z/TxGxG9Poq)):
+
+ ```c++
+ #include
+
+ int main() {
+ fmt::print("{} dollars", fmt::group_digits(1000000));
+ }
+ ```
+
+ prints \"1,000,000 dollars\".
+
+- Added support for faint, conceal, reverse and blink text styles
+ (https://github.com/fmtlib/fmt/pull/2394):
+
+
+
+ Thanks @benit8 and @data-man.
+
+- Added experimental support for compile-time floating point
+ formatting (https://github.com/fmtlib/fmt/pull/2426,
+ https://github.com/fmtlib/fmt/pull/2470). It is currently
+ limited to the header-only mode. Thanks @alexezeder.
+
+- Added UDL-based named argument support to compile-time format string
+ checks (https://github.com/fmtlib/fmt/issues/2640,
+ https://github.com/fmtlib/fmt/pull/2649). For example
+ ([godbolt](https://godbolt.org/z/ohGbbvonv)):
+
+ ```c++
+ #include
+
+ int main() {
+ using namespace fmt::literals;
+ fmt::print("{answer:s}", "answer"_a=42);
+ }
+ ```
+
+ gives a compile-time error on compilers with C++20 `consteval` and
+ non-type template parameter support (gcc 10+) because `s` is not a
+ valid format specifier for an integer.
+
+ Thanks @alexezeder.
+
+- Implemented escaping of string range elements. For example
+ ([godbolt](https://godbolt.org/z/rKvM1vKf3)):
+
+ ```c++
+ #include
+ #include
+
+ int main() {
+ fmt::print("{}", std::vector{"\naan"});
+ }
+ ```
+
+ is now printed as:
+
+ ["\naan"]
+
+ instead of:
+
+ ["
+ aan"]
+
+- Added an experimental `?` specifier for escaping strings.
+ (https://github.com/fmtlib/fmt/pull/2674). Thanks @BRevzin.
+
+- Switched to JSON-like representation of maps and sets for
+ consistency with Python\'s `str.format`. For example
+ ([godbolt](https://godbolt.org/z/seKjoY9W5)):
+
+ ```c++
+ #include
+ #include