C++ Format v2.0.0 Release Notes
Release Date: 2015-12-01 // over 8 years ago-
General
* [Breaking] Named arguments (`#169 <https://github.com/fmtlib/fmt/pull/169>`_, `#173 <https://github.com/fmtlib/fmt/pull/173>`_, `#174 <https://github.com/fmtlib/fmt/pull/174>`_): .. code:: c++ fmt::print("The answer is {answer}.", fmt::arg("answer", 42)); Thanks to `@jamboree <https://github.com/jamboree>`_. * [Experimental] User-defined literals for format and named arguments (`#204 <https://github.com/fmtlib/fmt/pull/204>`_, `#206 <https://github.com/fmtlib/fmt/pull/206>`_, `#207 <https://github.com/fmtlib/fmt/pull/207>`_): .. code:: c++ using namespace fmt::literals; fmt::print("The answer is {answer}.", "answer"_a=42); Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_. * ๐ [Breaking] Formatting of more than 16 arguments is now supported when using variadic templates (`#141 <https://github.com/fmtlib/fmt/issues/141>`_). Thanks to `@Shauren <https://github.com/Shauren>`_. * โ Runtime width specification (`#168 <https://github.com/fmtlib/fmt/pull/168>`_): .. code:: c++ fmt::format("{0:{1}}", 42, 5); // gives " 42" Thanks to `@jamboree <https://github.com/jamboree>`_. * [Breaking] Enums are now formatted with an overloaded ``std::ostream`` insertion operator (``operator<<``) if available (`#232 <https://github.com/fmtlib/fmt/issues/232>`_). * 0๏ธโฃ [Breaking] Changed default ``bool`` format to textual, "true" or "false" (`#170 <https://github.com/fmtlib/fmt/issues/170>`_): .. code:: c++ fmt::print("{}", true); // prints "true" To print ``bool`` as a number use numeric format specifier such as ``d``: .. code:: c++ fmt::print("{:d}", true); // prints "1" * ๐จ ``fmt::printf`` and ``fmt::sprintf`` now support formatting of ``bool`` with the ``%s`` specifier giving textual output, "true" or "false" (`#223 <https://github.com/fmtlib/fmt/pull/223>`_): .. code:: c++ fmt::printf("%s", true); // prints "true" Thanks to `@LarsGullik <https://github.com/LarsGullik>`_. * 0๏ธโฃ [Breaking] ``signed char`` and ``unsigned char`` are now formatted as integers by default (`#217 <https://github.com/fmtlib/fmt/pull/217>`_). * [Breaking] Pointers to C strings can now be formatted with the ``p`` specifier (`#223 <https://github.com/fmtlib/fmt/pull/223>`_): .. code:: c++ fmt::print("{:p}", "test"); // prints pointer value Thanks to `@LarsGullik <https://github.com/LarsGullik>`_. * ๐จ [Breaking] ``fmt::printf`` and ``fmt::sprintf`` now print null pointers as ``(nil)`` and null strings as ``(null)`` for consistency with glibc (`#226 <https://github.com/fmtlib/fmt/pull/226>`_). Thanks to `@LarsGullik <https://github.com/LarsGullik>`_. * ๐จ [Breaking] ``fmt::(s)printf`` now supports formatting of objects of user-defined types that provide an overloaded ``std::ostream`` insertion operator (``operator<<``) (`#201 <https://github.com/fmtlib/fmt/issues/201>`_): .. code:: c++ fmt::printf("The date is %s", Date(2012, 12, 9)); * [Breaking] The ``Buffer`` template is now part of the public API and can be used to implement custom memory buffers (`#140 <https://github.com/fmtlib/fmt/issues/140>`_). Thanks to `@polyvertex (Jean-Charles Lefebvre) <https://github.com/polyvertex>`_. * [Breaking] Improved compatibility between ``BasicStringRef`` and `std::experimental::basic_string_view <http://en.cppreference.com/w/cpp/experimental/basic_string_view>`_ (`#100 <https://github.com/fmtlib/fmt/issues/100>`_, `#159 <https://github.com/fmtlib/fmt/issues/159>`_, `#183 <https://github.com/fmtlib/fmt/issues/183>`_): - Comparison operators now compare string content, not pointers - ``BasicStringRef::c_str`` replaced by ``BasicStringRef::data`` - ``BasicStringRef`` is no longer assumed to be null-terminated References to null-terminated strings are now represented by a new class, ``BasicCStringRef``. * โ Dependency on pthreads introduced by Google Test is now optional (`#185 <https://github.com/fmtlib/fmt/issues/185>`_). * New CMake options ``FMT_DOC``, ``FMT_INSTALL`` and ``FMT_TEST`` to control generation of ``doc``, ``install`` and ``test`` targets respectively, on by default (`#197 <https://github.com/fmtlib/fmt/issues/197>`_, `#198 <https://github.com/fmtlib/fmt/issues/198>`_, `#200 <https://github.com/fmtlib/fmt/issues/200>`_). Thanks to `@maddinat0r (Alex Martin) <https://github.com/maddinat0r>`_. * ``noexcept`` is now used when compiling with MSVC2015 (`#215 <https://github.com/fmtlib/fmt/pull/215>`_). Thanks to `@dmkrepo (Dmitriy) <https://github.com/dmkrepo>`_. * ๐ Added an option to disable use of ``windows.h`` when ``FMT_USE_WINDOWS_H`` is defined as 0 before including ``format.h`` (`#171 <https://github.com/fmtlib/fmt/issues/171>`_). Thanks to `@alfps (Alf P. Steinbach) <https://github.com/alfps>`_. * ๐ [Breaking] ``windows.h`` is now included with ``NOMINMAX`` unless ``FMT_WIN_MINMAX`` is defined. This is done to prevent breaking code using ``std::min`` and ``std::max`` and only affects the header-only configuration (`#152 <https://github.com/fmtlib/fmt/issues/152>`_, `#153 <https://github.com/fmtlib/fmt/pull/153>`_, `#154 <https://github.com/fmtlib/fmt/pull/154>`_). Thanks to `@DevO2012 <https://github.com/DevO2012>`_. * ๐ Improved support for custom character types (`#171 <https://github.com/fmtlib/fmt/issues/171>`_). Thanks to `@alfps (Alf P. Steinbach) <https://github.com/alfps>`_. * ๐ Added an option to disable use of IOStreams when ``FMT_USE_IOSTREAMS`` is defined as 0 before including ``format.h`` (`#205 <https://github.com/fmtlib/fmt/issues/205>`_, `#208 <https://github.com/fmtlib/fmt/pull/208>`_). Thanks to `@JodiTheTigger <https://github.com/JodiTheTigger>`_. * ๐ Improved detection of ``isnan``, ``isinf`` and ``signbit``. Optimization
Made formatting of user-defined types more efficient with a custom stream buffer (
#92 <https://github.com/fmtlib/fmt/issues/92>
,#230 <https://github.com/fmtlib/fmt/pull/230>
). Thanks to@NotImplemented <https://github.com/NotImplemented>
_.๐ Further improved performance of
fmt::Writer
on integer formatting and fixed a minor regression. Now it is ~7% faster thankarma::generate
on Karma's benchmark (#186 <https://github.com/fmtlib/fmt/issues/186>
_).[Breaking] Reduced
compiled code size <https://github.com/fmtlib/fmt#compile-time-and-code-bloat>
_ (#143 <https://github.com/fmtlib/fmt/issues/143>
,#149 <https://github.com/fmtlib/fmt/pull/149>
).
Distribution
* [Breaking] Headers are now installed in ``${CMAKE_INSTALL_PREFIX}/include/cppformat`` (`#178 <https://github.com/fmtlib/fmt/issues/178>`_). Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_. * [Breaking] Changed the library name from ``format`` to ``cppformat`` for consistency with the project name and to avoid potential conflicts (`#178 <https://github.com/fmtlib/fmt/issues/178>`_). Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_. * ๐ง C++ Format is now available in `Debian <https://www.debian.org/>`_ GNU/Linux (`stretch <https://packages.debian.org/source/stretch/cppformat>`_, `sid <https://packages.debian.org/source/sid/cppformat>`_) and derived distributions such as `Ubuntu <https://launchpad.net/ubuntu/+source/cppformat>`_ 15.10 and later (`#155 <https://github.com/fmtlib/fmt/issues/155>`_):: $ sudo apt-get install libcppformat1-dev Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_. * ๐ฆ `Packages for Fedora and RHEL <https://admin.fedoraproject.org/pkgdb/package/cppformat/>`_ are now available. Thanks to Dave Johansen. * C++ Format can now be installed via `Homebrew <http://brew.sh/>`_ on OS X (`#157 <https://github.com/fmtlib/fmt/issues/157>`_):: $ brew install cppformat Thanks to `@ortho <https://github.com/ortho>`_, Anatoliy Bulukin. ๐ Documentation
๐ฑ Migrated from ReadTheDocs to GitHub Pages for better responsiveness and reliability (
#128 <https://github.com/fmtlib/fmt/issues/128>
_). New documentation address is http://cppformat.github.io/.โ Added
Building the documentation <https://fmt.dev/2.0.0/usage.html#building-the-documentation>
_ section to the documentation.๐ Documentation build script is now compatible with Python 3 and newer pip versions. (
#189 <https://github.com/fmtlib/fmt/pull/189>
,#209 <https://github.com/fmtlib/fmt/issues/209>
). Thanks to@JodiTheTigger <https://github.com/JodiTheTigger>
_ and@xentec <https://github.com/xentec>
_.๐ Documentation fixes and improvements (
#36 <https://github.com/fmtlib/fmt/issues/36>
,#75 <https://github.com/fmtlib/fmt/issues/75>
,#125 <https://github.com/fmtlib/fmt/issues/125>
,#160 <https://github.com/fmtlib/fmt/pull/160>
,#161 <https://github.com/fmtlib/fmt/pull/161>
,#162 <https://github.com/fmtlib/fmt/issues/162>
,#165 <https://github.com/fmtlib/fmt/issues/165>
,#210 <https://github.com/fmtlib/fmt/issues/210>
). Thanks to@syohex (Syohei YOSHIDA) <https://github.com/syohex>
_ and bug reporters.๐ Fixed out-of-tree documentation build (
#177 <https://github.com/fmtlib/fmt/issues/177>
). Thanks to@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>
.
๐ Fixes
* ๐ Fixed ``initializer_list`` detection (`#136 <https://github.com/fmtlib/fmt/issues/136>`_). Thanks to `@Gachapen (Magnus Bjerke Vik) <https://github.com/Gachapen>`_. * ๐ [Breaking] Fixed formatting of enums with numeric format specifiers in ``fmt::(s)printf`` (`#131 <https://github.com/fmtlib/fmt/issues/131>`_, `#139 <https://github.com/fmtlib/fmt/issues/139>`_): .. code:: c++ enum { ANSWER = 42 }; fmt::printf("%d", ANSWER); Thanks to `@Naios <https://github.com/Naios>`_. * ๐ Improved compatibility with old versions of MinGW (`#129 <https://github.com/fmtlib/fmt/issues/129>`_, `#130 <https://github.com/fmtlib/fmt/pull/130>`_, `#132 <https://github.com/fmtlib/fmt/issues/132>`_). Thanks to `@cstamford (Christopher Stamford) <https://github.com/cstamford>`_. * ๐ Fixed a compile error on MSVC with disabled exceptions (`#144 <https://github.com/fmtlib/fmt/issues/144>`_). * โ Added a workaround for broken implementation of variadic templates in MSVC2012 (`#148 <https://github.com/fmtlib/fmt/issues/148>`_). * Placed the anonymous namespace within ``fmt`` namespace for the header-only configuration (`#171 <https://github.com/fmtlib/fmt/issues/171>`_). Thanks to `@alfps (Alf P. Steinbach) <https://github.com/alfps>`_. * ๐ Fixed issues reported by Coverity Scan (`#187 <https://github.com/fmtlib/fmt/issues/187>`_, `#192 <https://github.com/fmtlib/fmt/issues/192>`_). * โช Implemented a workaround for a name lookup bug in MSVC2010 (`#188 <https://github.com/fmtlib/fmt/issues/188>`_). * ๐ Fixed compiler warnings (`#95 <https://github.com/fmtlib/fmt/issues/95>`_, `#96 <https://github.com/fmtlib/fmt/issues/96>`_, `#114 <https://github.com/fmtlib/fmt/pull/114>`_, `#135 <https://github.com/fmtlib/fmt/issues/135>`_, `#142 <https://github.com/fmtlib/fmt/issues/142>`_, `#145 <https://github.com/fmtlib/fmt/issues/145>`_, `#146 <https://github.com/fmtlib/fmt/issues/146>`_, `#158 <https://github.com/fmtlib/fmt/issues/158>`_, `#163 <https://github.com/fmtlib/fmt/issues/163>`_, `#175 <https://github.com/fmtlib/fmt/issues/175>`_, `#190 <https://github.com/fmtlib/fmt/issues/190>`_, `#191 <https://github.com/fmtlib/fmt/pull/191>`_, `#194 <https://github.com/fmtlib/fmt/issues/194>`_, `#196 <https://github.com/fmtlib/fmt/pull/196>`_, `#216 <https://github.com/fmtlib/fmt/issues/216>`_, `#218 <https://github.com/fmtlib/fmt/pull/218>`_, `#220 <https://github.com/fmtlib/fmt/pull/220>`_, `#229 <https://github.com/fmtlib/fmt/pull/229>`_, `#233 <https://github.com/fmtlib/fmt/issues/233>`_, `#234 <https://github.com/fmtlib/fmt/issues/234>`_, `#236 <https://github.com/fmtlib/fmt/pull/236>`_, `#281 <https://github.com/fmtlib/fmt/issues/281>`_, `#289 <https://github.com/fmtlib/fmt/issues/289>`_). Thanks to `@seanmiddleditch (Sean Middleditch) <https://github.com/seanmiddleditch>`_, `@dixlorenz (Dix Lorenz) <https://github.com/dixlorenz>`_, `@CarterLi (ๆ้ๆดฒ) <https://github.com/CarterLi>`_, `@Naios <https://github.com/Naios>`_, `@fmatthew5876 (Matthew Fioravante) <https://github.com/fmatthew5876>`_, `@LevskiWeng (Levski Weng) <https://github.com/LevskiWeng>`_, `@rpopescu <https://github.com/rpopescu>`_, `@gabime (Gabi Melman) <https://github.com/gabime>`_, `@cubicool (Jeremy Moles) <https://github.com/cubicool>`_, `@jkflying (Julian Kent) <https://github.com/jkflying>`_, `@LogicalKnight (Sean L) <https://github.com/LogicalKnight>`_, `@inguin (Ingo van Lil) <https://github.com/inguin>`_ and `@Jopie64 (Johan) <https://github.com/Jopie64>`_. * ๐ Fixed portability issues (mostly causing test failures) on ARM, ppc64, ppc64le, s390x and SunOS 5.11 i386 (`#138 <https://github.com/fmtlib/fmt/issues/138>`_, `#179 <https://github.com/fmtlib/fmt/issues/179>`_, `#180 <https://github.com/fmtlib/fmt/issues/180>`_, `#202 <https://github.com/fmtlib/fmt/issues/202>`_, `#225 <https://github.com/fmtlib/fmt/issues/225>`_, `Red Hat Bugzilla Bug 1260297 <https://bugzilla.redhat.com/show_bug.cgi?id=1260297>`_). Thanks to `@Naios <https://github.com/Naios>`_, `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_ and Dave Johansen. * ๐ Fixed a name conflict with macro ``free`` defined in ``crtdbg.h`` when ``_CRTDBG_MAP_ALLOC`` is set (`#211 <https://github.com/fmtlib/fmt/issues/211>`_). * ๐ Fixed shared library build on OS X (`#212 <https://github.com/fmtlib/fmt/pull/212>`_). Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_. * ๐ Fixed an overload conflict on MSVC when ``/Zc:wchar_t-`` option is specified (`#214 <https://github.com/fmtlib/fmt/pull/214>`_). Thanks to `@slavanap (Vyacheslav Napadovsky) <https://github.com/slavanap>`_. * ๐ Improved compatibility with MSVC 2008 (`#236 <https://github.com/fmtlib/fmt/pull/236>`_). Thanks to `@Jopie64 (Johan) <https://github.com/Jopie64>`_. * ๐ Improved compatibility with bcc32 (`#227 <https://github.com/fmtlib/fmt/issues/227>`_). * ๐ Fixed ``static_assert`` detection on Clang (`#228 <https://github.com/fmtlib/fmt/pull/228>`_). Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_.