C++ Format v6.2.0 Release Notes
Release Date: 2020-04-05 // about 4 years ago-
- π 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>
_.