Changelog History
Page 2
-
v7.0.3 Changes
August 06, 2020Worked around broken
numeric_limits
for 128-bit integers (#1787 <https://github.com/fmtlib/fmt/issues/1787>
_).β Added error reporting on missing named arguments (
#1796 <https://github.com/fmtlib/fmt/issues/1796>
_).Stopped using 128-bit integers with clang-cl (
#1800 <https://github.com/fmtlib/fmt/pull/1800>
). Thanks@Kingcom <https://github.com/Kingcom>
.π Fixed issues in locale-specific integer formatting (
#1782 <https://github.com/fmtlib/fmt/issues/1782>
,#1801 <https://github.com/fmtlib/fmt/issues/1801>
).
-
v7.0.2 Changes
July 29, 2020Worked around broken
numeric_limits
for 128-bit integers (#1725 <https://github.com/fmtlib/fmt/issues/1725>
_).π Fixed compatibility with CMake 3.4 (
#1779 <https://github.com/fmtlib/fmt/issues/1779>
_).π Fixed handling of digit separators in locale-specific formatting (
#1782 <https://github.com/fmtlib/fmt/issues/1782>
_).
-
v7.0.1 Changes
July 07, 2020β‘οΈ Updated the inline version namespace name.
Worked around a gcc bug in mangling of alias templates (
#1753 <https://github.com/fmtlib/fmt/issues/1753>
_).π Fixed a linkage error on Windows (
#1757 <https://github.com/fmtlib/fmt/issues/1757>
). Thanks@Kurkin (Dmitry Kurkin) <https://github.com/Kurkin>
.π Fixed minor issues with the documentation.
-
v7.0.0 Changes
July 05, 2020β¬οΈ Reduced the library size. For example, on macOS a stripped test binary statically linked with {fmt}
shrank from ~368k to less than 100k <http://www.zverovich.net/2020/05/21/reducing-library-size.html>
_.β Added a simpler and more efficient
format string compilation API <https://fmt.dev/7.0.0/api.html#compile-api>
_:
.. code:: c++
#include <fmt/compile.h> // Converts 42 into std::string using the most efficient method and no // runtime format string processing. std::string s = fmt::format(FMT_COMPILE("{}"), 42);
The old
fmt::compile
API is now deprecated.β‘οΈ Optimized integer formatting:
format_to
with format string compilation and a stack-allocated buffer is nowfaster than to_chars on both libc++ and libstdc++ <http://www.zverovich.net/2020/06/13/fast-int-to-string-revisited.html>
_.β‘οΈ Optimized handling of small format strings. For example,
.. code:: c++
fmt::format("Result: {}: ({},{},{},{})", str1, str2, str3, str4, str5)
is now ~40% faster (
#1685 <https://github.com/fmtlib/fmt/issues/1685>
_).- Applied extern templates to improve compile times when using the core API
and
fmt/format.h
(#1452 <https://github.com/fmtlib/fmt/issues/1452>
_). For example, on macOS with clang the compile time of a test translation unit dropped from 2.3s to 0.3s with-O2
and from 0.6s to 0.3s with the default settings (-O0
).
Before (
-O2
)::% time c++ -c test.cc -I include -std=c++17 -O2 c++ -c test.cc -I include -std=c++17 -O2 2.22s user 0.08s system 99% cpu 2.311 total
After (
-O2
)::% time c++ -c test.cc -I include -std=c++17 -O2 c++ -c test.cc -I include -std=c++17 -O2 0.26s user 0.04s system 98% cpu 0.303 total
Before (default)::
% time c++ -c test.cc -I include -std=c++17 c++ -c test.cc -I include -std=c++17 0.53s user 0.06s system 98% cpu 0.601 total
After (default)::
% time c++ -c test.cc -I include -std=c++17 c++ -c test.cc -I include -std=c++17 0.24s user 0.06s system 98% cpu 0.301 total
It is still recommended to use
fmt/core.h
instead offmt/format.h
but the compile time difference is now smaller. Thanks@alex3d <https://github.com/alex3d>
_ for the suggestion.- Named arguments are now stored on stack (no dynamic memory allocations) and the compiled code is more compact and efficient. For example
.. code:: c++
#include <fmt/core.h> int main() { fmt::print("The answer is {answer}\n", fmt::arg("answer", 42)); }
compiles to just (
godbolt <https://godbolt.org/z/NcfEp_>
__).. code:: asm
.LC0: .string "answer" .LC1: .string "The answer is {answer}\n" main: sub rsp, 56 mov edi, OFFSET FLAT:.LC1 mov esi, 23 movabs rdx, 4611686018427387905 lea rax, [rsp+32] lea rcx, [rsp+16] mov QWORD PTR [rsp+8], 1 mov QWORD PTR [rsp], rax mov DWORD PTR [rsp+16], 42 mov QWORD PTR [rsp+32], OFFSET FLAT:.LC0 mov DWORD PTR [rsp+40], 0 call fmt::v6::vprint(fmt::v6::basic_string_view<char>, fmt::v6::format_args) xor eax, eax add rsp, 56 ret .L.str.1: .asciz "answer"
- Implemented compile-time checks for dynamic width and precision
(
#1614 <https://github.com/fmtlib/fmt/issues/1614>
_):
.. code:: c++
#include <fmt/format.h> int main() { fmt::print(FMT_STRING("{0:{1}}"), 42); }
now gives a compilation error because argument 1 doesn't exist::
In file included from test.cc:1: include/fmt/format.h:2726:27: error: constexpr variable 'invalid_format' must be initialized by a constant expression FMT_CONSTEXPR_DECL bool invalid_format = ^ ... include/fmt/core.h:569:26: note: in call to '&checker(s, {}).context_->on_error(&"argument not found"[0])' if (id >= num_args_) on_error("argument not found"); ^
- β Added sentinel support to
fmt::join
(#1689 <https://github.com/fmtlib/fmt/pull/1689>
_)
.. code:: c++
struct zstring_sentinel {}; bool operator==(const char* p, zstring_sentinel) { return *p == '\0'; } bool operator!=(const char* p, zstring_sentinel) { return *p != '\0'; } struct zstring { const char* p; const char* begin() const { return p; } zstring_sentinel end() const { return {}; } }; auto s = fmt::format("{}", fmt::join(zstring{"hello"}, "_")); // s == "h_e_l_l_o"
Thanks
@BRevzin (Barry Revzin) <https://github.com/BRevzin>
_.β Added support for named arguments,
clear
andreserve
todynamic_format_arg_store
(#1655 <https://github.com/fmtlib/fmt/issues/1655>
,#1663 <https://github.com/fmtlib/fmt/pull/1663>
,#1674 <https://github.com/fmtlib/fmt/pull/1674>
,#1677 <https://github.com/fmtlib/fmt/pull/1677>
). Thanks@vsolontsov-ll (Vladimir Solontsov) <https://github.com/vsolontsov-ll>
_.β Added support for the
'c'
format specifier to integral types for compatibility withstd::format
(#1652 <https://github.com/fmtlib/fmt/issues/1652>
_).Replaced the
'n'
format specifier with'L'
for compatibility withstd::format
(#1624 <https://github.com/fmtlib/fmt/issues/1624>
_). The'n'
specifier can be enabled via theFMT_DEPRECATED_N_SPECIFIER
macro.0οΈβ£ The
'='
format specifier is now disabled by default for compatibility withstd::format
. It can be enabled via theFMT_DEPRECATED_NUMERIC_ALIGN
macro.β Removed the following deprecated APIs:
FMT_STRING_ALIAS
andfmt
macros - replaced byFMT_STRING
fmt::basic_string_view::char_type
- replaced byfmt::basic_string_view::value_type
convert_to_int
format_arg_store::types
*parse_context
- replaced by*format_parse_context
FMT_DEPRECATED_INCLUDE_OS
FMT_DEPRECATED_PERCENT
- incompatible withstd::format
*writer
- replaced by compiled format API
π Renamed the
internal
namespace todetail
(#1538 <https://github.com/fmtlib/fmt/issues/1538>
_). The former is still provided as an alias if theFMT_USE_INTERNAL
macro is defined.π Improved compatibility between
fmt::printf
with the standard specs (#1595 <https://github.com/fmtlib/fmt/issues/1595>
,#1682 <https://github.com/fmtlib/fmt/pull/1682>
,#1683 <https://github.com/fmtlib/fmt/pull/1683>
,#1687 <https://github.com/fmtlib/fmt/pull/1687>
,#1699 <https://github.com/fmtlib/fmt/pull/1699>
). Thanks@rimathia <https://github.com/rimathia>
.π Fixed handling of
operator<<
overloads that usecopyfmt
(#1666 <https://github.com/fmtlib/fmt/issues/1666>
_).β Added the
FMT_OS
CMake option to control inclusion of OS-specific APIs in the fmt target. This can be useful for embedded platforms (#1654 <https://github.com/fmtlib/fmt/issues/1654>
,#1656 <https://github.com/fmtlib/fmt/pull/1656>
). Thanks@kwesolowski (Krzysztof Wesolowski) <https://github.com/kwesolowski>
_.π Replaced
FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
with theFMT_FUZZ
macro to prevent interferring with fuzzing of projects using {fmt} (#1650 <https://github.com/fmtlib/fmt/pull/1650>
). Thanks@asraa (Asra Ali) <https://github.com/asraa>
.π Fixed compatibility with emscripten (
#1636 <https://github.com/fmtlib/fmt/issues/1636>
,#1637 <https://github.com/fmtlib/fmt/pull/1637>
). Thanks@ArthurSonzogni (Arthur Sonzogni) <https://github.com/ArthurSonzogni>
_.π Improved documentation (
#704 <https://github.com/fmtlib/fmt/issues/704>
,#1643 <https://github.com/fmtlib/fmt/pull/1643>
,#1660 <https://github.com/fmtlib/fmt/pull/1660>
,#1681 <https://github.com/fmtlib/fmt/pull/1681>
,#1691 <https://github.com/fmtlib/fmt/pull/1691>
,#1706 <https://github.com/fmtlib/fmt/pull/1706>
,#1714 <https://github.com/fmtlib/fmt/pull/1714>
,#1721 <https://github.com/fmtlib/fmt/pull/1721>
,#1739 <https://github.com/fmtlib/fmt/pull/1739>
,#1740 <https://github.com/fmtlib/fmt/pull/1740>
,#1741 <https://github.com/fmtlib/fmt/pull/1741>
,#1751 <https://github.com/fmtlib/fmt/pull/1751>
). Thanks@senior7515 (Alexander Gallego) <https://github.com/senior7515>
,@lsr0 (Lindsay Roberts) <https://github.com/lsr0>
,@puetzk (Kevin Puetz) <https://github.com/puetzk>
,@fpelliccioni (Fernando Pelliccioni) <https://github.com/fpelliccioni>
, Alexey Kuzmenko,@jelly (jelle van der Waa) <https://github.com/jelly>
,@claremacrae (Clare Macrae) <https://github.com/claremacrae>
,@jiapengwen (ζδ½³ιΉ) <https://github.com/jiapengwen>
,@gsjaardema (Greg Sjaardema) <https://github.com/gsjaardema>
,@alexey-milovidov <https://github.com/alexey-milovidov>
_.π Implemented various build configuration fixes and improvements (
#1603 <https://github.com/fmtlib/fmt/pull/1603>
,#1657 <https://github.com/fmtlib/fmt/pull/1657>
,#1702 <https://github.com/fmtlib/fmt/pull/1702>
,#1728 <https://github.com/fmtlib/fmt/pull/1728>
). Thanks@scramsby (Scott Ramsby) <https://github.com/scramsby>
,@jtojnar (Jan Tojnar) <https://github.com/jtojnar>
,@orivej (Orivej Desh) <https://github.com/orivej>
,@flagarde <https://github.com/flagarde>
.π Fixed various warnings and compilation issues (
#1616 <https://github.com/fmtlib/fmt/pull/1616>
,#1620 <https://github.com/fmtlib/fmt/issues/1620>
,#1622 <https://github.com/fmtlib/fmt/issues/1622>
,#1625 <https://github.com/fmtlib/fmt/issues/1625>
,#1627 <https://github.com/fmtlib/fmt/pull/1627>
,#1628 <https://github.com/fmtlib/fmt/issues/1628>
,#1629 <https://github.com/fmtlib/fmt/pull/1629>
,#1631 <https://github.com/fmtlib/fmt/issues/1631>
,#1633 <https://github.com/fmtlib/fmt/pull/1633>
,#1649 <https://github.com/fmtlib/fmt/pull/1649>
,#1658 <https://github.com/fmtlib/fmt/issues/1658>
,#1661 <https://github.com/fmtlib/fmt/pull/1661>
,#1667 <https://github.com/fmtlib/fmt/pull/1667>
,#1668 <https://github.com/fmtlib/fmt/issues/1668>
,#1669 <https://github.com/fmtlib/fmt/pull/1669>
,#1692 <https://github.com/fmtlib/fmt/issues/1692>
,#1696 <https://github.com/fmtlib/fmt/pull/1696>
,#1697 <https://github.com/fmtlib/fmt/pull/1697>
,#1707 <https://github.com/fmtlib/fmt/issues/1707>
,#1712 <https://github.com/fmtlib/fmt/pull/1712>
,#1716 <https://github.com/fmtlib/fmt/pull/1716>
,#1722 <https://github.com/fmtlib/fmt/pull/1722>
,#1724 <https://github.com/fmtlib/fmt/issues/1724>
,#1729 <https://github.com/fmtlib/fmt/pull/1729>
,#1738 <https://github.com/fmtlib/fmt/pull/1738>
,#1742 <https://github.com/fmtlib/fmt/issues/1742>
,#1743 <https://github.com/fmtlib/fmt/issues/1743>
,#1744 <https://github.com/fmtlib/fmt/pull/1744>
,#1747 <https://github.com/fmtlib/fmt/issues/1747>
,#1750 <https://github.com/fmtlib/fmt/pull/1750>
). Thanks@gsjaardema (Greg Sjaardema) <https://github.com/gsjaardema>
,@gabime (Gabi Melman) <https://github.com/gabime>
,@johnor (Johan) <https://github.com/johnor>
,@Kurkin (Dmitry Kurkin) <https://github.com/Kurkin>
,@invexed (James Beach) <https://github.com/invexed>
,@peterbell10 <https://github.com/peterbell10>
,@daixtrose (Markus Werle) <https://github.com/daixtrose>
,@petrutlucian94 (Lucian Petrut) <https://github.com/petrutlucian94>
,@Neargye (Daniil Goncharov) <https://github.com/Neargye>
,@ambitslix (Attila M. Szilagyi) <https://github.com/ambitslix>
,@gabime (Gabi Melman) <https://github.com/gabime>
,@erthink (Leonid Yuriev) <https://github.com/erthink>
,@tohammer (Tobias Hammer) <https://github.com/tohammer>
,@0x8000-0000 (Florin Iucha) <https://github.com/0x8000-0000>
.
-
v6.2.1 Changes
May 09, 2020π Fixed ostream support in
sprintf
(#1631 <https://github.com/fmtlib/fmt/issues/1631>
_).π Fixed type detection when using implicit conversion to
string_view
and ostreamoperator<<
inconsistently (#1662 <https://github.com/fmtlib/fmt/issues/1662>
_).
-
v6.2.0 Changes
April 05, 2020- π Improved error reporting when trying to format an object of a non-formattable type:
.. code:: c++
fmt::format("{}", S());
now gives::
include/fmt/core.h:1015:5: error: static_assert failed due to requirement 'formattable' "Cannot format argument. To make type T formattable provide a formatter<T> specialization: https://fmt.dev/latest/api.html#formatting-user-defined-types" static_assert( ^ ... note: in instantiation of function template specialization 'fmt::v6::format<char [3], S, char>' requested here fmt::format("{}", S()); ^
if
S
is not formattable.β¬οΈ Reduced the library size by ~10%.
π¨ Always print decimal point if
#
is specified (#1476 <https://github.com/fmtlib/fmt/issues/1476>
,#1498 <https://github.com/fmtlib/fmt/issues/1498>
):
.. code:: c++
fmt::print("{:#.0f}", 42.0);
now prints
42.
Implemented the
'L'
specifier for locale-specific numeric formatting to improve compatibility withstd::format
. The'n'
specifier is now deprecated and will be removed in the next major release.π Moved OS-specific APIs such as
windows_error
fromfmt/format.h
tofmt/os.h
. You can defineFMT_DEPRECATED_INCLUDE_OS
to automatically includefmt/os.h
fromfmt/format.h
for compatibility but this will be disabled in the next major release.β Added precision overflow detection in floating-point formatting.
Implemented detection of invalid use of
fmt::arg
.π Used
type_identity
to block unnecessary template argument deduction. Thanks Tim Song.π Improved UTF-8 handling (
#1109 <https://github.com/fmtlib/fmt/issues/1109>
_):
.. code:: c++
fmt::print("β{0:β^{2}}β\n" "β{1: ^{2}}β\n" "β{0:β^{2}}β\n", "", "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!", 20);
now prints::
ββββββββββββββββββββββ β ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ! β ββββββββββββββββββββββ
on systems that support Unicode.
- β Added experimental dynamic argument storage
(
#1170 <https://github.com/fmtlib/fmt/issues/1170>
,#1584 <https://github.com/fmtlib/fmt/pull/1584>
):
.. code:: c++
fmt::dynamic_format_arg_store<fmt::format_context> store; store.push_back("answer"); store.push_back(42); fmt::vprint("The {} is {}.\n", store);
prints::
The answer is 42.
Thanks
@vsolontsov-ll (Vladimir Solontsov) <https://github.com/vsolontsov-ll>
_.Made
fmt::join
acceptinitializer_list
(#1591 <https://github.com/fmtlib/fmt/pull/1591>
). Thanks@Rapotkinnik (Nikolay Rapotkin) <https://github.com/Rapotkinnik>
.π Fixed handling of empty tuples (
#1588 <https://github.com/fmtlib/fmt/issues/1588>
_).Fixed handling of output iterators in
format_to_n
(#1506 <https://github.com/fmtlib/fmt/issues/1506>
_).π Fixed formatting of
std::chrono::duration
types to wide output (#1533 <https://github.com/fmtlib/fmt/pull/1533>
). Thanks@zeffy (pilao) <https://github.com/zeffy>
.β Added const
begin
andend
overload to buffers (#1553 <https://github.com/fmtlib/fmt/pull/1553>
). Thanks@dominicpoeschko <https://github.com/dominicpoeschko>
.π Added the ability to disable floating-point formatting via
FMT_USE_FLOAT
,FMT_USE_DOUBLE
andFMT_USE_LONG_DOUBLE
macros for extremely memory-constrained embedded system (#1590 <https://github.com/fmtlib/fmt/pull/1590>
). Thanks@albaguirre (Alberto Aguirre) <https://github.com/albaguirre>
.Made
FMT_STRING
work withconstexpr
string_view
(#1589 <https://github.com/fmtlib/fmt/pull/1589>
). Thanks@scramsby (Scott Ramsby) <https://github.com/scramsby>
.π Implemented a minor optimization in the format string parser (
#1560 <https://github.com/fmtlib/fmt/pull/1560>
). Thanks@IkarusDeveloper <https://github.com/IkarusDeveloper>
.π Improved attribute detection (
#1469 <https://github.com/fmtlib/fmt/pull/1469>
,#1475 <https://github.com/fmtlib/fmt/pull/1475>
,#1576 <https://github.com/fmtlib/fmt/pull/1576>
). Thanks@federico-busato (Federico) <https://github.com/federico-busato>
,@chronoxor (Ivan Shynkarenka) <https://github.com/chronoxor>
,@refnum <https://github.com/refnum>
.π Improved documentation (
#1481 <https://github.com/fmtlib/fmt/pull/1481>
,#1523 <https://github.com/fmtlib/fmt/pull/1523>
). Thanks@JackBoosY (JackΒ·BoosΒ·Yu) <https://github.com/JackBoosY>
,@imba-tjd (θ°δΉιΌ) <https://github.com/imba-tjd>
.π Fixed symbol visibility on Linux when compiling with
-fvisibility=hidden
(#1535 <https://github.com/fmtlib/fmt/pull/1535>
). Thanks@milianw (Milian Wolff) <https://github.com/milianw>
.π Implemented various build configuration fixes and improvements (
#1264 <https://github.com/fmtlib/fmt/issues/1264>
,#1460 <https://github.com/fmtlib/fmt/issues/1460>
,#1534 <https://github.com/fmtlib/fmt/pull/1534>
,#1536 <https://github.com/fmtlib/fmt/issues/1536>
,#1545 <https://github.com/fmtlib/fmt/issues/1545>
,#1546 <https://github.com/fmtlib/fmt/pull/1546>
,#1566 <https://github.com/fmtlib/fmt/issues/1566>
,#1582 <https://github.com/fmtlib/fmt/pull/1582>
,#1597 <https://github.com/fmtlib/fmt/issues/1597>
,#1598 <https://github.com/fmtlib/fmt/pull/1598>
). Thanks@ambitslix (Attila M. Szilagyi) <https://github.com/ambitslix>
,@jwillikers (Jordan Williams) <https://github.com/jwillikers>
,@stac47 (Laurent Stacul) <https://github.com/stac47>
_.π Fixed various warnings and compilation issues (
#1433 <https://github.com/fmtlib/fmt/pull/1433>
,#1461 <https://github.com/fmtlib/fmt/issues/1461>
,#1470 <https://github.com/fmtlib/fmt/pull/1470>
,#1480 <https://github.com/fmtlib/fmt/pull/1480>
,#1485 <https://github.com/fmtlib/fmt/pull/1485>
,#1492 <https://github.com/fmtlib/fmt/pull/1492>
,#1493 <https://github.com/fmtlib/fmt/issues/1493>
,#1504 <https://github.com/fmtlib/fmt/issues/1504>
,#1505 <https://github.com/fmtlib/fmt/pull/1505>
,#1512 <https://github.com/fmtlib/fmt/pull/1512>
,#1515 <https://github.com/fmtlib/fmt/issues/1515>
,#1516 <https://github.com/fmtlib/fmt/pull/1516>
,#1518 <https://github.com/fmtlib/fmt/pull/1518>
,#1519 <https://github.com/fmtlib/fmt/pull/1519>
,#1520 <https://github.com/fmtlib/fmt/pull/1520>
,#1521 <https://github.com/fmtlib/fmt/pull/1521>
,#1522 <https://github.com/fmtlib/fmt/pull/1522>
,#1524 <https://github.com/fmtlib/fmt/issues/1524>
,#1530 <https://github.com/fmtlib/fmt/pull/1530>
,#1531 <https://github.com/fmtlib/fmt/issues/1531>
,#1532 <https://github.com/fmtlib/fmt/pull/1532>
,#1539 <https://github.com/fmtlib/fmt/issues/1539>
,#1547 <https://github.com/fmtlib/fmt/issues/1547>
,#1548 <https://github.com/fmtlib/fmt/issues/1548>
,#1554 <https://github.com/fmtlib/fmt/pull/1554>
,#1567 <https://github.com/fmtlib/fmt/issues/1567>
,#1568 <https://github.com/fmtlib/fmt/pull/1568>
,#1569 <https://github.com/fmtlib/fmt/pull/1569>
,#1571 <https://github.com/fmtlib/fmt/pull/1571>
,#1573 <https://github.com/fmtlib/fmt/pull/1573>
,#1575 <https://github.com/fmtlib/fmt/pull/1575>
,#1581 <https://github.com/fmtlib/fmt/pull/1581>
,#1583 <https://github.com/fmtlib/fmt/issues/1583>
,#1586 <https://github.com/fmtlib/fmt/issues/1586>
,#1587 <https://github.com/fmtlib/fmt/issues/1587>
,#1594 <https://github.com/fmtlib/fmt/issues/1594>
,#1596 <https://github.com/fmtlib/fmt/pull/1596>
,#1604 <https://github.com/fmtlib/fmt/issues/1604>
,#1606 <https://github.com/fmtlib/fmt/pull/1606>
,#1607 <https://github.com/fmtlib/fmt/issues/1607>
,#1609 <https://github.com/fmtlib/fmt/issues/1609>
). Thanks@marti4d (Chris Martin) <https://github.com/marti4d>
,@iPherian <https://github.com/iPherian>
,@parkertomatoes <https://github.com/parkertomatoes>
,@gsjaardema (Greg Sjaardema) <https://github.com/gsjaardema>
,@chronoxor (Ivan Shynkarenka) <https://github.com/chronoxor>
,@DanielaE (Daniela Engert) <https://github.com/DanielaE>
,@torsten48 <https://github.com/torsten48>
,@tohammer (Tobias Hammer) <https://github.com/tohammer>
,@lefticus (Jason Turner) <https://github.com/lefticus>
,@ryusakki (Haise) <https://github.com/ryusakki>
,@adnsv (Alex Denisov) <https://github.com/adnsv>
,@fghzxm <https://github.com/fghzxm>
,@refnum <https://github.com/refnum>
,@pramodk (Pramod Kumbhar) <https://github.com/pramodk>
,@Spirrwell <https://github.com/Spirrwell>
,@scramsby (Scott Ramsby) <https://github.com/scramsby>
_.
-
v6.1.2 Changes
December 11, 2019π Fixed ABI compatibility with
libfmt.so.6.0.0
(#1471 <https://github.com/fmtlib/fmt/issues/1471>
_).π Fixed handling types convertible to
std::string_view
(#1451 <https://github.com/fmtlib/fmt/pull/1451>
). Thanks@denizevrenci (Deniz Evrenci) <https://github.com/denizevrenci>
.Made CUDA test an opt-in enabled via the
FMT_CUDA_TEST
CMake option.π Fixed sign conversion warnings (
#1440 <https://github.com/fmtlib/fmt/pull/1440>
). Thanks@0x8000-0000 (Florin Iucha) <https://github.com/0x8000-0000>
.
-
v6.1.1 Changes
December 04, 2019π Fixed shared library build on Windows (
#1443 <https://github.com/fmtlib/fmt/pull/1443>
,#1445 <https://github.com/fmtlib/fmt/issues/1445>
,#1446 <https://github.com/fmtlib/fmt/pull/1446>
,#1450 <https://github.com/fmtlib/fmt/issues/1450>
). Thanks@egorpugin (Egor Pugin) <https://github.com/egorpugin>
,@bbolli (Beat Bolli) <https://github.com/bbolli>
.β Added a missing decimal point in exponent notation with trailing zeros.
Removed deprecated
format_arg_store::TYPES
.
-
v6.1.0 Changes
December 01, 2019- β
{fmt} now formats IEEE 754
float
anddouble
using the shortest decimal representation with correct rounding by default:
.. code:: c++
#include <cmath> #include <fmt/core.h> int main() { fmt::print("{}", M_PI); }
prints
3.141592653589793
.- 0οΈβ£ Made the fast binary to decimal floating-point formatter the default,
simplified it and improved performance. {fmt} is now 15 times faster than
libc++'s
std::ostringstream
, 11 times faster thanprintf
and 10% faster than double-conversion ondtoa-benchmark <https://github.com/fmtlib/dtoa-benchmark>
_:
================== ========= ======= Function Time (ns) Speedup ================== ========= ======= ostringstream 1,346.30 1.00x ostrstream 1,195.74 1.13x sprintf 995.08 1.35x doubleconv 99.10 13.59x fmt 88.34 15.24x ================== ========= =======
.. image:: https://user-images.githubusercontent.com/576385/ 69767160-cdaca400-112f-11ea-9fc5-347c9f83caad.png
- {fmt} no longer converts
float
arguments todouble
. In particular this improves the default (shortest) representation of floats and makesfmt::format
consistent withstd::format
specs (#1336 <https://github.com/fmtlib/fmt/issues/1336>
,#1353 <https://github.com/fmtlib/fmt/issues/1353>
,#1360 <https://github.com/fmtlib/fmt/pull/1360>
,#1361 <https://github.com/fmtlib/fmt/pull/1361>
):
.. code:: c++
fmt::print("{}", 0.1f);
prints
0.1
instead of0.10000000149011612
.Thanks
@orivej (Orivej Desh) <https://github.com/orivej>
_.π¨ Made floating-point formatting output consistent with
printf
/iostreams (#1376 <https://github.com/fmtlib/fmt/issues/1376>
,#1417 <https://github.com/fmtlib/fmt/issues/1417>
).β Added support for 128-bit integers (
#1287 <https://github.com/fmtlib/fmt/pull/1287>
_):
.. code:: c++
fmt::print("{}", std::numeric_limits<__int128_t>::max());
prints
170141183460469231731687303715884105727
.Thanks
@denizevrenci (Deniz Evrenci) <https://github.com/denizevrenci>
_.π The overload of
print
that takestext_style
is now atomic, i.e. the output from different threads doesn't interleave (#1351 <https://github.com/fmtlib/fmt/pull/1351>
). Thanks@tankiJong (Tanki Zhang) <https://github.com/tankiJong>
.Made compile time in the header-only mode ~20% faster by reducing the number of template instantiations.
wchar_t
overload ofvprint
was moved fromfmt/core.h
tofmt/format.h
.β Added an overload of
fmt::join
that works with tuples (#1322 <https://github.com/fmtlib/fmt/issues/1322>
,#1330 <https://github.com/fmtlib/fmt/pull/1330>
):
.. code:: c++
#include <tuple> #include <fmt/ranges.h> int main() { std::tuple<char, int, float> t{'a', 1, 2.0f}; fmt::print("{}", t); }
prints
('a', 1, 2.0)
.Thanks
@jeremyong (Jeremy Ong) <https://github.com/jeremyong>
_.- π Changed formatting of octal zero with prefix from "00" to "0":
.. code:: c++
fmt::print("{:#o}", 0);
prints
0
.- The locale is now passed to ostream insertion (
<<
) operators (#1406 <https://github.com/fmtlib/fmt/pull/1406>
_):
.. code:: c++
#include <fmt/locale.h> #include <fmt/ostream.h> struct S { double value; }; std::ostream& operator<<(std::ostream& os, S s) { return os << s.value; } int main() { auto s = fmt::format(std::locale("fr_FR.UTF-8"), "{}", S{0.42}); // s == "0,42" }
Thanks
@dlaugt (Daniel LaΓΌgt) <https://github.com/dlaugt>
_.Locale-specific number formatting now uses grouping (
#1393 <https://github.com/fmtlib/fmt/issues/1393>
_#1394 <https://github.com/fmtlib/fmt/pull/1394>
). Thanks@skrdaniel <https://github.com/skrdaniel>
.π Fixed handling of types with deleted implicit rvalue conversion to
const char**
(#1421 <https://github.com/fmtlib/fmt/issues/1421>
_):
.. code:: c++
struct mystring { operator const char*() const&; operator const char*() &; operator const char*() const&& = delete; operator const char*() && = delete; }; mystring str; fmt::print("{}", str); // now compiles
Enums are now mapped to correct underlying types instead of
int
(#1286 <https://github.com/fmtlib/fmt/pull/1286>
). Thanks@agmt (Egor Seredin) <https://github.com/agmt>
.Enum classes are no longer implicitly converted to
int
(#1424 <https://github.com/fmtlib/fmt/issues/1424>
_).Added
basic_format_parse_context
for consistency with C++20std::format
and deprecatedbasic_parse_context
.π Fixed handling of UTF-8 in precision (
#1389 <https://github.com/fmtlib/fmt/issues/1389>
,#1390 <https://github.com/fmtlib/fmt/pull/1390>
). Thanks@tajtiattila (Attila Tajti) <https://github.com/tajtiattila>
_.π {fmt} can now be installed on Linux, macOS and Windows with
Conda <https://docs.conda.io/en/latest/>
__ using itsconda-forge <https://conda-forge.org>
__package <https://github.com/conda-forge/fmt-feedstock>
__ (#1410 <https://github.com/fmtlib/fmt/pull/1410>
_)::conda install -c conda-forge fmt
Thanks
@tdegeus (Tom de Geus) <https://github.com/tdegeus>
_.β Added a CUDA test (
#1285 <https://github.com/fmtlib/fmt/pull/1285>
,#1317 <https://github.com/fmtlib/fmt/pull/1317>
). Thanks@luncliff (Park DongHa) <https://github.com/luncliff>
_ and@risa2000 <https://github.com/risa2000>
_.π Improved documentation (
#1276 <https://github.com/fmtlib/fmt/pull/1276>
,#1291 <https://github.com/fmtlib/fmt/issues/1291>
,#1296 <https://github.com/fmtlib/fmt/issues/1296>
,#1315 <https://github.com/fmtlib/fmt/pull/1315>
,#1332 <https://github.com/fmtlib/fmt/pull/1332>
,#1337 <https://github.com/fmtlib/fmt/pull/1337>
,#1395 <https://github.com/fmtlib/fmt/issues/1395>
_#1418 <https://github.com/fmtlib/fmt/pull/1418>
). Thanks@waywardmonkeys (Bruce Mitchener) <https://github.com/waywardmonkeys>
,@pauldreik (Paul Dreik) <https://github.com/pauldreik>
,@jackoalan (Jack Andersen) <https://github.com/jackoalan>
.Various code improvements (
#1358 <https://github.com/fmtlib/fmt/pull/1358>
,#1407 <https://github.com/fmtlib/fmt/pull/1407>
). Thanks@orivej (Orivej Desh) <https://github.com/orivej>
,@dpacbach (David P. Sicilia) <https://github.com/dpacbach>
,π Fixed compile-time format string checks for user-defined types (
#1292 <https://github.com/fmtlib/fmt/issues/1292>
_).Worked around a false positive in
unsigned-integer-overflow
sanitizer (#1377 <https://github.com/fmtlib/fmt/issues/1377>
_).π Fixed various warnings and compilation issues (
#1273 <https://github.com/fmtlib/fmt/issues/1273>
,#1278 <https://github.com/fmtlib/fmt/pull/1278>
,#1280 <https://github.com/fmtlib/fmt/pull/1280>
,#1281 <https://github.com/fmtlib/fmt/issues/1281>
,#1288 <https://github.com/fmtlib/fmt/issues/1288>
,#1290 <https://github.com/fmtlib/fmt/pull/1290>
,#1301 <https://github.com/fmtlib/fmt/pull/1301>
,#1305 <https://github.com/fmtlib/fmt/issues/1305>
,#1306 <https://github.com/fmtlib/fmt/issues/1306>
,#1309 <https://github.com/fmtlib/fmt/issues/1309>
,#1312 <https://github.com/fmtlib/fmt/pull/1312>
,#1313 <https://github.com/fmtlib/fmt/issues/1313>
,#1316 <https://github.com/fmtlib/fmt/issues/1316>
,#1319 <https://github.com/fmtlib/fmt/issues/1319>
,#1320 <https://github.com/fmtlib/fmt/pull/1320>
,#1326 <https://github.com/fmtlib/fmt/pull/1326>
,#1328 <https://github.com/fmtlib/fmt/pull/1328>
,#1344 <https://github.com/fmtlib/fmt/issues/1344>
,#1345 <https://github.com/fmtlib/fmt/pull/1345>
,#1347 <https://github.com/fmtlib/fmt/pull/1347>
,#1349 <https://github.com/fmtlib/fmt/pull/1349>
,#1354 <https://github.com/fmtlib/fmt/issues/1354>
,#1362 <https://github.com/fmtlib/fmt/issues/1362>
,#1366 <https://github.com/fmtlib/fmt/issues/1366>
,#1364 <https://github.com/fmtlib/fmt/pull/1364>
,#1370 <https://github.com/fmtlib/fmt/pull/1370>
,#1371 <https://github.com/fmtlib/fmt/pull/1371>
,#1385 <https://github.com/fmtlib/fmt/issues/1385>
,#1388 <https://github.com/fmtlib/fmt/issues/1388>
,#1397 <https://github.com/fmtlib/fmt/pull/1397>
,#1414 <https://github.com/fmtlib/fmt/pull/1414>
,#1416 <https://github.com/fmtlib/fmt/pull/1416>
,#1422 <https://github.com/fmtlib/fmt/issues/1422>
_#1427 <https://github.com/fmtlib/fmt/pull/1427>
,#1431 <https://github.com/fmtlib/fmt/issues/1431>
,#1433 <https://github.com/fmtlib/fmt/pull/1433>
). Thanks@hhb <https://github.com/hhb>
,@gsjaardema (Greg Sjaardema) <https://github.com/gsjaardema>
,@gabime (Gabi Melman) <https://github.com/gabime>
,@neheb (Rosen Penev) <https://github.com/neheb>
,@vedranmiletic (Vedran MiletiΔ) <https://github.com/vedranmiletic>
,@dkavolis (Daumantas Kavolis) <https://github.com/dkavolis>
,@mwinterb <https://github.com/mwinterb>
,@orivej (Orivej Desh) <https://github.com/orivej>
,@denizevrenci (Deniz Evrenci) <https://github.com/denizevrenci>
@leonklingele <https://github.com/leonklingele>
,@chronoxor (Ivan Shynkarenka) <https://github.com/chronoxor>
,@kent-tri <https://github.com/kent-tri>
,@0x8000-0000 (Florin Iucha) <https://github.com/0x8000-0000>
,@marti4d (Chris Martin) <https://github.com/marti4d>
_.
- β
{fmt} now formats IEEE 754
-
v6.0.0 Changes
August 26, 2019Switched to the
MIT license <https://github.com/fmtlib/fmt/blob/5a4b24613ba16cc689977c3b5bd8274a3ba1dd1f/LICENSE.rst>
_ with an optional exception that allows distributing binary code without attribution.0οΈβ£ Floating-point formatting is now locale-independent by default:
.. code:: c++
#include <locale> #include <fmt/core.h> int main() { std::locale::global(std::locale("ru_RU.UTF-8")); fmt::print("value = {}", 4.2); }
prints "value = 4.2" regardless of the locale.
For locale-specific formatting use the
n
specifier:.. code:: c++
std::locale::global(std::locale("ru_RU.UTF-8")); fmt::print("value = {:n}", 4.2);
prints "value = 4,2".
- β Added an experimental Grisu floating-point formatting algorithm
implementation (disabled by default). To enable it compile with the
FMT_USE_GRISU
macro defined to 1:
.. code:: c++
#define FMT_USE_GRISU 1 #include <fmt/format.h> auto s = fmt::format("{}", 4.2); // formats 4.2 using Grisu
With Grisu enabled, {fmt} is 13x faster than
std::ostringstream
(libc++) and 10x faster thansprintf
ondtoa-benchmark <https://github.com/fmtlib/dtoa-benchmark>
_ (full results <https://fmt.dev/unknown_mac64_clang10.0.html>
_):.. image:: https://user-images.githubusercontent.com/576385/ 54883977-9fe8c000-4e28-11e9-8bde-272d122e7c52.jpg
π Separated formatting and parsing contexts for consistency with
C++20 std::format <http://eel.is/c++draft/format>
_, removing the undocumentedbasic_format_context::parse_context()
function.β Added
oss-fuzz <https://github.com/google/oss-fuzz>
_ support (#1199 <https://github.com/fmtlib/fmt/pull/1199>
). Thanks@pauldreik (Paul Dreik) <https://github.com/pauldreik>
.formatter
specializations now always take precedence overoperator<<
(#952 <https://github.com/fmtlib/fmt/issues/952>
_):
.. code:: c++
#include <iostream> #include <fmt/ostream.h> struct S {}; std::ostream& operator<<(std::ostream& os, S) { return os << 1; } template <> struct fmt::formatter<S> : fmt::formatter<int> { auto format(S, format_context& ctx) { return formatter<int>::format(2, ctx); } }; int main() { std::cout << S() << "\n"; // prints 1 using operator<< fmt::print("{}\n", S()); // prints 2 using formatter }
- Introduced the experimental
fmt::compile
function that does format string compilation (#618 <https://github.com/fmtlib/fmt/issues/618>
,#1169 <https://github.com/fmtlib/fmt/issues/1169>
,#1171 <https://github.com/fmtlib/fmt/pull/1171>
_):
.. code:: c++
#include <fmt/compile.h> auto f = fmt::compile<int>("{}"); std::string s = fmt::format(f, 42); // can be called multiple times to // format different values // s == "42"
It moves the cost of parsing a format string outside of the format function which can be beneficial when identically formatting many objects of the same types. Thanks
@stryku (Mateusz Janek) <https://github.com/stryku>
_.- β Added experimental
%
format specifier that formats floating-point values as percentages (#1060 <https://github.com/fmtlib/fmt/pull/1060>
,#1069 <https://github.com/fmtlib/fmt/pull/1069>
,#1071 <https://github.com/fmtlib/fmt/pull/1071>
_):
.. code:: c++
auto s = fmt::format("{:.1%}", 0.42); // s == "42.0%"
Thanks
@gawain-bolton (Gawain Bolton) <https://github.com/gawain-bolton>
_.- Implemented precision for floating-point durations
(
#1004 <https://github.com/fmtlib/fmt/issues/1004>
,#1012 <https://github.com/fmtlib/fmt/pull/1012>
):
.. code:: c++
auto s = fmt::format("{:.1}", std::chrono::duration<double>(1.234)); // s == 1.2s
Thanks
@DanielaE (Daniela Engert) <https://github.com/DanielaE>
_.- Implemented
chrono
format specifiers%Q
and%q
that give the value and the unit respectively (#1019 <https://github.com/fmtlib/fmt/pull/1019>
_):
.. code:: c++
auto value = fmt::format("{:%Q}", 42s); // value == "42" auto unit = fmt::format("{:%q}", 42s); // unit == "s"
Thanks
@DanielaE (Daniela Engert) <https://github.com/DanielaE>
_.- π Fixed handling of dynamic width in chrono formatter:
.. code:: c++
auto s = fmt::format("{0:{1}%H:%M:%S}", std::chrono::seconds(12345), 12); // ^ width argument index ^ width // s == "03:25:45 "
Thanks Howard Hinnant.
β Removed deprecated
fmt/time.h
. Usefmt/chrono.h
instead.β Added
fmt::format
andfmt::vformat
overloads that taketext_style
(#993 <https://github.com/fmtlib/fmt/issues/993>
,#994 <https://github.com/fmtlib/fmt/pull/994>
):
.. code:: c++
#include <fmt/color.h> std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red), "The answer is {}.", 42);
Thanks
@Naios (Denis Blank) <https://github.com/Naios>
_.β Removed the deprecated color API (
print_colored
). Use the new API, namelyprint
overloads that taketext_style
instead.Made
std::unique_ptr
andstd::shared_ptr
formattable as pointers viafmt::ptr
(#1121 <https://github.com/fmtlib/fmt/pull/1121>
_):
.. code:: c++
std::unique_ptr<int> p = ...; fmt::print("{}", fmt::ptr(p)); // prints p as a pointer
Thanks
@sighingnow (Tao He) <https://github.com/sighingnow>
_.π¨ Made
print
andvprint
report I/O errors (#1098 <https://github.com/fmtlib/fmt/issues/1098>
,#1099 <https://github.com/fmtlib/fmt/pull/1099>
). Thanks@BillyDonahue (Billy Donahue) <https://github.com/BillyDonahue>
_.π Marked deprecated APIs with the
[[deprecated]]
attribute and removed internal uses of deprecated APIs (#1022 <https://github.com/fmtlib/fmt/pull/1022>
). Thanks@eliaskosunen (Elias Kosunen) <https://github.com/eliaskosunen>
.βͺ Modernized the codebase using more C++11 features and removing workarounds. Most importantly,
buffer_context
is now an alias template, so usebuffer_context<T>
instead ofbuffer_context<T>::type
. These features require GCC 4.8 or later.formatter
specializations now always take precedence over implicit conversions toint
and the undocumentedconvert_to_int
trait is now deprecated.π Moved the undocumented
basic_writer
,writer
, andwwriter
types to theinternal
namespace.Removed deprecated
basic_format_context::begin()
. Useout()
instead.Disallowed passing the result of
join
as an lvalue to prevent misuse.π¨ Refactored the undocumented structs that represent parsed format specifiers to simplify the API and allow multibyte fill.
π Moved SFINAE to template parameters to reduce symbol sizes.
Switched to
fputws
for writing wide strings so that it's no longer required to call_setmode
on Windows (#1229 <https://github.com/fmtlib/fmt/issues/1229>
,#1243 <https://github.com/fmtlib/fmt/pull/1243>
). Thanks@jackoalan (Jack Andersen) <https://github.com/jackoalan>
_.π Improved literal-based API (
#1254 <https://github.com/fmtlib/fmt/pull/1254>
). Thanks@sylveon (Charles Milette) <https://github.com/sylveon>
.β Added support for exotic platforms without
uintptr_t
such as IBM i (AS/400) which has 128-bit pointers and only 64-bit integers (#1059 <https://github.com/fmtlib/fmt/issues/1059>
_).β Added
Sublime Text syntax highlighting config <https://github.com/fmtlib/fmt/blob/master/support/C%2B%2B.sublime-syntax>
_ (#1037 <https://github.com/fmtlib/fmt/issues/1037>
). Thanks@Kronuz (GermΓ‘n MΓ©ndez Bravo) <https://github.com/Kronuz>
.Added the
FMT_ENFORCE_COMPILE_STRING
macro to enforce the use of compile-time format strings (#1231 <https://github.com/fmtlib/fmt/pull/1231>
). Thanks@jackoalan (Jack Andersen) <https://github.com/jackoalan>
.π Stopped setting
CMAKE_BUILD_TYPE
if {fmt} is a subproject (#1081 <https://github.com/fmtlib/fmt/issues/1081>
_).π Various build improvements (
#1039 <https://github.com/fmtlib/fmt/pull/1039>
,#1078 <https://github.com/fmtlib/fmt/pull/1078>
,#1091 <https://github.com/fmtlib/fmt/pull/1091>
,#1103 <https://github.com/fmtlib/fmt/pull/1103>
,#1177 <https://github.com/fmtlib/fmt/pull/1177>
). Thanks@luncliff (Park DongHa) <https://github.com/luncliff>
,@jasonszang (Jason Shuo Zang) <https://github.com/jasonszang>
,@olafhering (Olaf Hering) <https://github.com/olafhering>
,@Lecetem <https://github.com/Lectem>
,@pauldreik (Paul Dreik) <https://github.com/pauldreik>
.π Improved documentation (
#1049 <https://github.com/fmtlib/fmt/issues/1049>
,#1051 <https://github.com/fmtlib/fmt/pull/1051>
,#1083 <https://github.com/fmtlib/fmt/pull/1083>
,#1113 <https://github.com/fmtlib/fmt/pull/1113>
,#1114 <https://github.com/fmtlib/fmt/pull/1114>
,#1146 <https://github.com/fmtlib/fmt/issues/1146>
,#1180 <https://github.com/fmtlib/fmt/issues/1180>
,#1250 <https://github.com/fmtlib/fmt/pull/1250>
,#1252 <https://github.com/fmtlib/fmt/pull/1252>
,#1265 <https://github.com/fmtlib/fmt/pull/1265>
). Thanks@mikelui (Michael Lui) <https://github.com/mikelui>
,@foonathan (Jonathan MΓΌller) <https://github.com/foonathan>
,@BillyDonahue (Billy Donahue) <https://github.com/BillyDonahue>
,@jwakely (Jonathan Wakely) <https://github.com/jwakely>
,@kaisbe (Kais Ben Salah) <https://github.com/kaisbe>
,@sdebionne (Samuel Debionne) <https://github.com/sdebionne>
.π Fixed ambiguous formatter specialization in
fmt/ranges.h
(#1123 <https://github.com/fmtlib/fmt/issues/1123>
_).π Fixed formatting of a non-empty
std::filesystem::path
which is an infinitely deep range of its components (#1268 <https://github.com/fmtlib/fmt/issues/1268>
_).π Fixed handling of general output iterators when formatting characters (
#1056 <https://github.com/fmtlib/fmt/issues/1056>
,#1058 <https://github.com/fmtlib/fmt/pull/1058>
). Thanks@abolz (Alexander Bolz) <https://github.com/abolz>
_.π Fixed handling of output iterators in
formatter
specialization for ranges (#1064 <https://github.com/fmtlib/fmt/issues/1064>
_).π Fixed handling of exotic character types (
#1188 <https://github.com/fmtlib/fmt/issues/1188>
_).Made chrono formatting work with exceptions disabled (
#1062 <https://github.com/fmtlib/fmt/issues/1062>
_).π Fixed DLL visibility issues (
#1134 <https://github.com/fmtlib/fmt/pull/1134>
,#1147 <https://github.com/fmtlib/fmt/pull/1147>
). Thanks@denchat <https://github.com/denchat>
_.Disabled the use of UDL template extension on GCC 9 (
#1148 <https://github.com/fmtlib/fmt/issues/1148>
_).β Removed misplaced
format
compile-time checks fromprintf
(#1173 <https://github.com/fmtlib/fmt/issues/1173>
_).π Fixed issues in the experimental floating-point formatter (
#1072 <https://github.com/fmtlib/fmt/issues/1072>
,#1129 <https://github.com/fmtlib/fmt/issues/1129>
,#1153 <https://github.com/fmtlib/fmt/issues/1153>
,#1155 <https://github.com/fmtlib/fmt/pull/1155>
,#1210 <https://github.com/fmtlib/fmt/issues/1210>
,#1222 <https://github.com/fmtlib/fmt/issues/1222>
). Thanks@alabuzhev (Alex Alabuzhev) <https://github.com/alabuzhev>
_.π Fixed bugs discovered by fuzzing or during fuzzing integration (
#1124 <https://github.com/fmtlib/fmt/issues/1124>
,#1127 <https://github.com/fmtlib/fmt/issues/1127>
,#1132 <https://github.com/fmtlib/fmt/issues/1132>
,#1135 <https://github.com/fmtlib/fmt/pull/1135>
,#1136 <https://github.com/fmtlib/fmt/issues/1136>
,#1141 <https://github.com/fmtlib/fmt/issues/1141>
,#1142 <https://github.com/fmtlib/fmt/issues/1142>
,#1178 <https://github.com/fmtlib/fmt/issues/1178>
,#1179 <https://github.com/fmtlib/fmt/issues/1179>
,#1194 <https://github.com/fmtlib/fmt/issues/1194>
). Thanks@pauldreik (Paul Dreik) <https://github.com/pauldreik>
_.π Fixed building tests on FreeBSD and Hurd (
#1043 <https://github.com/fmtlib/fmt/issues/1043>
). Thanks@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>
.π Fixed various warnings and compilation issues (
#998 <https://github.com/fmtlib/fmt/pull/998>
,#1006 <https://github.com/fmtlib/fmt/pull/1006>
,#1008 <https://github.com/fmtlib/fmt/issues/1008>
,#1011 <https://github.com/fmtlib/fmt/issues/1011>
,#1025 <https://github.com/fmtlib/fmt/issues/1025>
,#1027 <https://github.com/fmtlib/fmt/pull/1027>
,#1028 <https://github.com/fmtlib/fmt/pull/1028>
,#1029 <https://github.com/fmtlib/fmt/pull/1029>
,#1030 <https://github.com/fmtlib/fmt/pull/1030>
,#1031 <https://github.com/fmtlib/fmt/pull/1031>
,#1054 <https://github.com/fmtlib/fmt/pull/1054>
,#1063 <https://github.com/fmtlib/fmt/issues/1063>
,#1068 <https://github.com/fmtlib/fmt/pull/1068>
,#1074 <https://github.com/fmtlib/fmt/pull/1074>
,#1075 <https://github.com/fmtlib/fmt/pull/1075>
,#1079 <https://github.com/fmtlib/fmt/pull/1079>
,#1086 <https://github.com/fmtlib/fmt/pull/1086>
,#1088 <https://github.com/fmtlib/fmt/issues/1088>
,#1089 <https://github.com/fmtlib/fmt/pull/1089>
,#1094 <https://github.com/fmtlib/fmt/pull/1094>
,#1101 <https://github.com/fmtlib/fmt/issues/1101>
,#1102 <https://github.com/fmtlib/fmt/pull/1102>
,#1105 <https://github.com/fmtlib/fmt/issues/1105>
,#1107 <https://github.com/fmtlib/fmt/pull/1107>
,#1115 <https://github.com/fmtlib/fmt/issues/1115>
,#1117 <https://github.com/fmtlib/fmt/issues/1117>
,#1118 <https://github.com/fmtlib/fmt/issues/1118>
,#1120 <https://github.com/fmtlib/fmt/issues/1120>
,#1123 <https://github.com/fmtlib/fmt/issues/1123>
,#1139 <https://github.com/fmtlib/fmt/pull/1139>
,#1140 <https://github.com/fmtlib/fmt/issues/1140>
,#1143 <https://github.com/fmtlib/fmt/issues/1143>
,#1144 <https://github.com/fmtlib/fmt/pull/1144>
,#1150 <https://github.com/fmtlib/fmt/pull/1150>
,#1151 <https://github.com/fmtlib/fmt/pull/1151>
,#1152 <https://github.com/fmtlib/fmt/issues/1152>
,#1154 <https://github.com/fmtlib/fmt/issues/1154>
,#1156 <https://github.com/fmtlib/fmt/issues/1156>
,#1159 <https://github.com/fmtlib/fmt/pull/1159>
,#1175 <https://github.com/fmtlib/fmt/issues/1175>
,#1181 <https://github.com/fmtlib/fmt/issues/1181>
,#1186 <https://github.com/fmtlib/fmt/issues/1186>
,#1187 <https://github.com/fmtlib/fmt/pull/1187>
,#1191 <https://github.com/fmtlib/fmt/pull/1191>
,#1197 <https://github.com/fmtlib/fmt/issues/1197>
,#1200 <https://github.com/fmtlib/fmt/issues/1200>
,#1203 <https://github.com/fmtlib/fmt/issues/1203>
,#1205 <https://github.com/fmtlib/fmt/issues/1205>
,#1206 <https://github.com/fmtlib/fmt/pull/1206>
,#1213 <https://github.com/fmtlib/fmt/issues/1213>
,#1214 <https://github.com/fmtlib/fmt/issues/1214>
,#1217 <https://github.com/fmtlib/fmt/pull/1217>
,#1228 <https://github.com/fmtlib/fmt/issues/1228>
,#1230 <https://github.com/fmtlib/fmt/pull/1230>
,#1232 <https://github.com/fmtlib/fmt/issues/1232>
,#1235 <https://github.com/fmtlib/fmt/pull/1235>
,#1236 <https://github.com/fmtlib/fmt/pull/1236>
,#1240 <https://github.com/fmtlib/fmt/issues/1240>
). Thanks@DanielaE (Daniela Engert) <https://github.com/DanielaE>
,@mwinterb <https://github.com/mwinterb>
,@eliaskosunen (Elias Kosunen) <https://github.com/eliaskosunen>
,@morinmorin <https://github.com/morinmorin>
,@ricco19 (Brian Ricciardelli) <https://github.com/ricco19>
,@waywardmonkeys (Bruce Mitchener) <https://github.com/waywardmonkeys>
,@chronoxor (Ivan Shynkarenka) <https://github.com/chronoxor>
,@remyabel <https://github.com/remyabel>
,@pauldreik (Paul Dreik) <https://github.com/pauldreik>
,@gsjaardema (Greg Sjaardema) <https://github.com/gsjaardema>
,@rcane (Ronny KrΓΌger) <https://github.com/rcane>
,@mocabe <https://github.com/mocabe>
,@denchat <https://github.com/denchat>
,@cjdb (Christopher Di Bella) <https://github.com/cjdb>
,@HazardyKnusperkeks (BjΓΆrn SchΓ€pers) <https://github.com/HazardyKnusperkeks>
,@vedranmiletic (Vedran MiletiΔ) <https://github.com/vedranmiletic>
,@jackoalan (Jack Andersen) <https://github.com/jackoalan>
,@DaanDeMeyer (Daan De Meyer) <https://github.com/DaanDeMeyer>
,@starkmapper (Mark Stapper) <https://github.com/starkmapper>
_.