12.0.0
-
Optimized the default floating point formatting (#3675, #4516). In particular, formatting a
doublewith 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:Function Time (ns) Speedup fmt11 34.471 1.00x fmt12 21.000 1.64x
-
Added
constexprsupport tofmt::format. For example:#include <fmt/compile.h> using namespace fmt::literals; std::string s = fmt::format(""_cf, 42);
now works at compile time provided that
std::stringsupportsconstexpr(#3403, #4456). Thanks @msvetkin. -
Added
FMT_STATIC_FORMATthat allows formatting into a string of the exact required size at compile time.For example:
#include <fmt/compile.h> constexpr auto s = FMT_STATIC_FORMAT("{}", 42);
compiles to just
__ZL1s: .asciiz "42"
It can be accessed as a C string with
s.c_str()or as a string view withs.str(). -
Improved C++20 module support (#4451, #4459, #4476, #4488, #4491, #4495). Thanks @arBmind, @tkhyn, @Mishura4, @anonymouspc and @autoantwort.
-
Switched to using estimated display width in precision. For example:
fmt::print("|{:.4}|\n|1234|\n", "π±π±π±");
prints
because
π±has an estimated width of 2 (#4272, #4443, #4475). Thanks @nikhilreddydev and @localspook. -
Fix interaction between debug presentation, precision, and width for strings (#4478). Thanks @localspook.
-
Implemented allocator propagation on
basic_memory_buffermove (#4487, #4490). Thanks @toprakmurat. -
Fixed an ambiguity between
std::reference_wrapper<T>andformat_asformatters (#4424, #4434). Thanks @jeremy-rifkin. -
Removed the following deprecated APIs:
has_formatter: useis_formattableinstead, -basic_format_args::parse_context_type,basic_format_args::formatter_typeand similar aliases in context types, - wide stream overload offmt::printf, - wide stream overloads offmt::printthat take text styles, -is_*chartraits, -fmt::localtime.
-
Deprecated wide overloads of
fmt::fprintfandfmt::sprintf. -
Improved diagnostics for the incorrect usage of
fmt::ptr(#4453). Thanks @TobiSchluter. -
Made handling of ANSI escape sequences more efficient (#4511, #4528). Thanks @localspook and @Anas-Hamdane.
-
Fixed a buffer overflow on all emphasis flags set (#4498). Thanks @dominicpoeschko.
-
Fixed an integer overflow for precision close to the max
intvalue. -
Fixed compatibility with WASI (#4496, #4497). Thanks @whitequark.
-
Fixed
back_insert_iteratordetection, preventing a fallback on slower path that handles arbitrary iterators (#4454). -
Fixed handling of invalid glibc
FILEbuffers (#4469). -
Added
wchar_tsupport to thestd::byteformatter (#4479, #4480). Thanks @phprus. -
Changed component prefix from
fmt-tofmt_for compatibility with NSIS/CPack on Windows, e.g.fmt-docchanged tofmt_doc(#4441, #4442). Thanks @n-stein. -
Added the
FMT_CUSTOM_ASSERT_FAILmacro to simplify providing a customfmt::assert_failimplementation (#4505). Thanks @HazardyKnusperkeks. -
Switched to
FMT_THROWon reporting format errors so that it can be overriden by users when exceptions are disabled (#4521). Thanks @HazardyKnusperkeks. -
Improved master project detection and disabled install targets when using {fmt} as a subproject by default (#4536). Thanks @crueter.
-
Made various code improvements (#4445, #4448, #4473, #4522). Thanks @localspook, @tchaikov and @way4sahil.
-
Added Conan instructions to the docs (#4537). Thanks @uilianries.
-
Removed Bazel files to avoid issues with downstream packaging (#4530). Thanks @mering.
-
Added more entries for generated files to
.gitignore(#4355, #4512). Thanks @dinomight and @localspook. -
Fixed various warnings and compilation issues (#4447, #4470, #4474, #4477, #4471, #4483, #4515, #4533, #4534). Thanks @dodomorandi, @localspook, @remyjette, @Tomek-Stolarczyk, @Mishura4, @mattiasljungstrom and @FatihBAKIR.
