-
Optimized the default floating point formatting (#3675, #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:Function Time (ns) Speedup fmt11 34.471 1.00x fmt12 21.000 1.64x
-
Added
constexpr
support 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::string
supportsconstexpr
(#3403, #4456). Thanks @msvetkin. -
Added
FMT_STATIC_FORMAT
that 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_buffer
move (#4487, #4490). Thanks @toprakmurat. -
Fixed an ambiguity between
std::reference_wrapper<T>
andformat_as
formatters (#4424, #4434). Thanks @jeremy-rifkin. -
Removed the following deprecated APIs:
has_formatter
: useis_formattable
instead, -basic_format_args::parse_context_type
,basic_format_args::formatter_type
and similar aliases in context types, - wide stream overload offmt::printf
, - wide stream overloads offmt::print
that take text styles, -is_*char
traits, -fmt::localtime
.
-
Deprecated wide overloads of
fmt::fprintf
andfmt::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
int
value. -
Fixed compatibility with WASI (#4496, #4497). Thanks @whitequark.
-
Fixed
back_insert_iterator
detection, preventing a fallback on slower path that handles arbitrary iterators (#4454). -
Fixed handling of invalid glibc
FILE
buffers (#4469). -
Added
wchar_t
support to thestd::byte
formatter (#4479, #4480). Thanks @phprus. -
Changed component prefix from
fmt-
tofmt_
for compatibility with NSIS/CPack on Windows, e.g.fmt-doc
changed tofmt_doc
(#4441, #4442). Thanks @n-stein. -
Added the
FMT_CUSTOM_ASSERT_FAIL
macro to simplify providing a customfmt::assert_fail
implementation (#4505). Thanks @HazardyKnusperkeks. -
Switched to
FMT_THROW
on 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.