fmt/ChangeLog.rst

2400 lines
91 KiB
ReStructuredText
Raw Normal View History

2019-08-26 13:23:37 +00:00
6.0.0 - 2019-08-26
------------------
2019-07-12 16:54:02 +00:00
2019-08-24 13:32:47 +00:00
* Switched to the `MIT license
<https://github.com/fmtlib/fmt/blob/5a4b24613ba16cc689977c3b5bd8274a3ba1dd1f/LICENSE.rst>`_
with an optional exception that allows distributing binary code without
attribution.
2019-08-10 17:01:23 +00:00
* Floating-point formatting is now locale-independent by default:
2019-07-12 23:21:13 +00:00
.. 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".
2019-08-04 16:20:49 +00:00
* Added an experimental Grisu floating-point formatting algorithm
2019-08-10 14:59:33 +00:00
implementation (disabled by default). To enable it compile with the
2019-08-10 16:56:13 +00:00
``FMT_USE_GRISU`` macro defined to 1:
2019-08-04 16:20:49 +00:00
.. code:: c++
#define FMT_USE_GRISU 1
#include <fmt/format.h>
auto s = fmt::format("{}", 4.2); // formats 4.2 using Grisu
2019-08-04 17:38:33 +00:00
With Grisu enabled, {fmt} is 13x faster than ``std::ostringstream`` (libc++)
2019-08-10 14:59:33 +00:00
and 10x faster than ``sprintf`` on `dtoa-benchmark
<https://github.com/fmtlib/dtoa-benchmark>`_ (`full results
<https://fmt.dev/unknown_mac64_clang10.0.html>`_):
2019-08-04 16:20:49 +00:00
.. image:: https://user-images.githubusercontent.com/576385/
54883977-9fe8c000-4e28-11e9-8bde-272d122e7c52.jpg
2019-08-24 13:32:47 +00:00
* Separated formatting and parsing contexts for consistency with
2019-08-24 13:34:19 +00:00
`C++20 std::format <http://eel.is/c++draft/format>`_, removing the
2019-08-24 13:32:47 +00:00
undocumented ``basic_format_context::parse_context()`` function.
2019-08-10 16:56:13 +00:00
* Added `oss-fuzz <https://github.com/google/oss-fuzz>`_ support
2019-08-10 14:59:33 +00:00
(`#1199 <https://github.com/fmtlib/fmt/pull/1199>`_).
2019-08-10 17:01:23 +00:00
Thanks `@pauldreik (Paul Dreik) <https://github.com/pauldreik>`_.
2019-08-04 16:20:49 +00:00
2019-08-04 14:28:48 +00:00
* ``formatter`` specializations now always take precedence over ``operator<<``
(`#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
2019-08-10 14:59:33 +00:00
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>`_):
2019-07-25 15:44:40 +00:00
.. code:: c++
2019-07-25 16:59:59 +00:00
#include <fmt/compile.h>
auto f = fmt::compile<int>("{}");
2019-08-04 14:28:48 +00:00
std::string s = fmt::format(f, 42); // can be called multiple times to format
// different values
2019-07-25 16:59:59 +00:00
// s == "42"
2019-07-25 15:44:40 +00:00
2019-08-04 14:28:48 +00:00
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>`_.
2019-08-04 16:20:49 +00:00
* Added the ``%`` format specifier that formats floating-point values as
percentages (`#1060 <https://github.com/fmtlib/fmt/pull/1060>`_,
2019-08-10 16:56:13 +00:00
`#1069 <https://github.com/fmtlib/fmt/pull/1069>`_,
2019-08-04 16:20:49 +00:00
`#1071 <https://github.com/fmtlib/fmt/pull/1071>`_):
.. code:: c++
auto s = fmt::format("{:.1%}", 0.42); // s == "42.0%"
2019-08-10 17:01:23 +00:00
Thanks `@gawain-bolton (Gawain Bolton) <https://github.com/gawain-bolton>`_.
2019-08-04 16:20:49 +00:00
2019-08-04 14:28:48 +00:00
* 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>`_):
2019-08-04 16:20:49 +00:00
.. code:: c++
auto value = fmt::format("{:%Q}", 42s); // value == "42"
auto unit = fmt::format("{:%q}", 42s); // unit == "s"
2019-08-04 14:28:48 +00:00
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_.
2019-07-25 15:44:40 +00:00
* Fixed handling of dynamic width in chrono formatter:
2019-07-25 16:59:59 +00:00
.. code:: c++
2019-07-25 15:44:40 +00:00
2019-07-25 16:59:59 +00:00
auto s = fmt::format("{0:{1}%H:%M:%S}", std::chrono::seconds(12345), 12);
// ^ width argument index ^ width
// s == "03:25:45 "
2019-07-25 15:44:40 +00:00
Thanks Howard Hinnant.
2019-08-04 16:20:49 +00:00
* Removed deprecated ``fmt/time.h``. Use ``fmt/chrono.h`` instead.
2019-07-25 16:59:59 +00:00
* Added ``fmt::format`` and ``fmt::vformat`` overloads that take ``text_style``
2019-07-25 15:44:40 +00:00
(`#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>`_.
2019-08-10 14:59:33 +00:00
* Removed the deprecated color API (``print_colored``). Use the new API, namely
``print`` overloads that take ``text_style`` instead.
2019-08-04 17:38:33 +00:00
* Made ``std::unique_ptr`` and ``std::shared_ptr`` formattable as pointers via
2019-08-10 16:25:16 +00:00
``fmt::ptr`` (`#1121 <https://github.com/fmtlib/fmt/pull/1121>`_):
2019-08-04 17:38:33 +00:00
.. code:: c++
std::unique_ptr<int> p = ...;
fmt::print("{}", fmt::ptr(p)); // prints p as a pointer
2019-08-10 16:25:16 +00:00
Thanks `@sighingnow (Tao He) <https://github.com/sighingnow>`_.
2019-08-04 17:38:33 +00:00
* Made ``print`` and ``vprint`` 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>`_.
2019-08-04 14:28:48 +00:00
* 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>`_.
2019-08-10 14:59:33 +00:00
* Modernized the codebase using more C++11 features and removing workarounds.
Most importantly, ``buffer_context`` is now an alias template, so
2019-08-24 13:46:43 +00:00
use ``buffer_context<T>`` instead of ``buffer_context<T>::type``.
2019-09-13 01:20:48 +00:00
These features require GCC 4.8 or later.
2019-08-10 14:59:33 +00:00
* ``formatter`` specializations now always take precedence over implicit
conversions to ``int`` and the undocumented ``convert_to_int`` trait
is now deprecated.
2019-08-04 16:20:49 +00:00
* Moved the undocumented ``basic_writer``, ``writer``, and ``wwriter`` types
to the ``internal`` namespace.
2019-08-10 14:59:33 +00:00
* Removed deprecated ``basic_format_context::begin()``. Use ``out()`` 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.
2019-08-04 16:20:49 +00:00
* Moved SFINAE to template parameters to reduce symbol sizes.
2019-08-10 16:25:16 +00:00
* 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>`_).
2019-08-10 14:59:33 +00:00
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>`_.
2019-08-04 17:38:33 +00:00
* Added support for exotic platforms without ``uintptr_t`` such as IBM i
2019-08-10 14:59:33 +00:00
(AS/400) which has 128-bit pointers and only 64-bit integers
2019-08-04 17:38:33 +00:00
(`#1059 <https://github.com/fmtlib/fmt/issues/1059>`_).
2019-08-04 16:20:49 +00:00
* 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>`_.
2019-08-10 14:59:33 +00:00
* 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>`_).
2019-08-04 17:38:33 +00:00
* 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>`_,
2019-08-05 12:37:44 +00:00
`#1103 <https://github.com/fmtlib/fmt/pull/1103>`_,
`#1177 <https://github.com/fmtlib/fmt/pull/1177>`_).
2019-08-04 17:38:33 +00:00
Thanks `@luncliff (Park DongHa) <https://github.com/luncliff>`_,
`@jasonszang (Jason Shuo Zang) <https://github.com/jasonszang>`_,
`@olafhering (Olaf Hering) <https://github.com/olafhering>`_,
2019-08-05 12:37:44 +00:00
`@Lecetem <https://github.com/Lectem>`_,
`@pauldreik (Paul Dreik) <https://github.com/pauldreik>`_.
2019-08-04 17:38:33 +00:00
2019-08-04 16:20:49 +00:00
* Improved documentation
2019-08-10 16:25:16 +00:00
(`#1049 <https://github.com/fmtlib/fmt/issues/1049>`_,
`#1051 <https://github.com/fmtlib/fmt/pull/1051>`_,
2019-08-10 16:56:13 +00:00
`#1083 <https://github.com/fmtlib/fmt/pull/1083>`_,
2019-08-10 14:59:33 +00:00
`#1113 <https://github.com/fmtlib/fmt/pull/1113>`_,
`#1114 <https://github.com/fmtlib/fmt/pull/1114>`_,
2019-08-10 16:25:16 +00:00
`#1146 <https://github.com/fmtlib/fmt/issues/1146>`_,
`#1180 <https://github.com/fmtlib/fmt/issues/1180>`_,
2019-08-10 14:59:33 +00:00
`#1250 <https://github.com/fmtlib/fmt/pull/1250>`_,
2019-08-21 20:06:21 +00:00
`#1252 <https://github.com/fmtlib/fmt/pull/1252>`_,
`#1265 <https://github.com/fmtlib/fmt/pull/1265>`_).
2019-08-04 16:20:49 +00:00
Thanks `@mikelui (Michael Lui) <https://github.com/mikelui>`_,
2019-08-10 16:56:13 +00:00
`@foonathan (Jonathan Müller) <https://github.com/foonathan>`_,
2019-08-10 14:59:33 +00:00
`@BillyDonahue (Billy Donahue) <https://github.com/BillyDonahue>`_,
`@jwakely (Jonathan Wakely) <https://github.com/jwakely>`_,
2019-08-21 20:06:21 +00:00
`@kaisbe (Kais Ben Salah) <https://github.com/kaisbe>`_,
`@sdebionne (Samuel Debionne) <https://github.com/sdebionne>`_.
2019-08-04 16:20:49 +00:00
2019-08-05 12:37:44 +00:00
* Fixed ambiguous formatter specialization in ``fmt/ranges.h``
(`#1123 <https://github.com/fmtlib/fmt/issues/1123>`_).
2019-08-21 20:06:21 +00:00
* 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>`_).
2019-08-05 12:37:44 +00:00
* 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>`_.
2019-08-10 16:25:16 +00:00
* 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>`_).
2019-08-05 12:37:44 +00:00
* Made chrono formatting work with exceptions disabled
(`#1062 <https://github.com/fmtlib/fmt/issues/1062>`_).
* Fixed DLL visibility issues
2019-08-10 16:56:13 +00:00
(`#1134 <https://github.com/fmtlib/fmt/pull/1134>`_,
2019-08-10 16:25:16 +00:00
`#1147 <https://github.com/fmtlib/fmt/pull/1147>`_).
2019-08-05 12:37:44 +00:00
Thanks `@denchat <https://github.com/denchat>`_.
* Disabled the use of UDL template extension on GCC 9
(`#1148 <https://github.com/fmtlib/fmt/issues/1148>`_).
2019-08-10 16:25:16 +00:00
* Removed misplaced ``format`` compile-time checks from ``printf``
2019-08-05 12:37:44 +00:00
(`#1173 <https://github.com/fmtlib/fmt/issues/1173>`_).
* Fixed issues in the experimental floating-point formatter
(`#1072 <https://github.com/fmtlib/fmt/issues/1072>`_,
2019-08-10 16:25:16 +00:00
`#1129 <https://github.com/fmtlib/fmt/issues/1129>`_,
2019-08-05 12:37:44 +00:00
`#1153 <https://github.com/fmtlib/fmt/issues/1153>`_,
2019-08-10 14:59:33 +00:00
`#1155 <https://github.com/fmtlib/fmt/pull/1155>`_,
2019-08-10 16:25:16 +00:00
`#1210 <https://github.com/fmtlib/fmt/issues/1210>`_,
`#1222 <https://github.com/fmtlib/fmt/issues/1222>`_).
2019-08-05 12:37:44 +00:00
Thanks `@alabuzhev (Alex Alabuzhev) <https://github.com/alabuzhev>`_.
2019-08-27 07:44:55 +00:00
* Fixed bugs discovered by fuzzing or during fuzzing integration
2019-08-10 16:25:16 +00:00
(`#1124 <https://github.com/fmtlib/fmt/issues/1124>`_,
`#1127 <https://github.com/fmtlib/fmt/issues/1127>`_,
2019-08-10 14:59:33 +00:00
`#1132 <https://github.com/fmtlib/fmt/issues/1132>`_,
2019-08-10 16:56:13 +00:00
`#1135 <https://github.com/fmtlib/fmt/pull/1135>`_,
2019-08-10 16:25:16 +00:00
`#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>`_).
2019-08-05 12:37:44 +00:00
Thanks `@pauldreik (Paul Dreik) <https://github.com/pauldreik>`_.
2019-08-10 16:25:16 +00:00
* Fixed building tests on FreeBSD and Hurd
(`#1043 <https://github.com/fmtlib/fmt/issues/1043>`_).
Thanks `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_.
2019-08-10 16:56:13 +00:00
* Fixed various warnings and compilation issues
(`#998 <https://github.com/fmtlib/fmt/pull/998>`_,
`#1006 <https://github.com/fmtlib/fmt/pull/1006>`_,
2019-08-04 14:28:48 +00:00
`#1008 <https://github.com/fmtlib/fmt/issues/1008>`_,
2019-08-04 16:20:49 +00:00
`#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>`_,
2019-08-10 16:56:13 +00:00
`#1079 <https://github.com/fmtlib/fmt/pull/1079>`_,
2019-08-04 16:20:49 +00:00
`#1086 <https://github.com/fmtlib/fmt/pull/1086>`_,
`#1088 <https://github.com/fmtlib/fmt/issues/1088>`_,
2019-08-04 17:38:33 +00:00
`#1089 <https://github.com/fmtlib/fmt/pull/1089>`_,
2019-08-10 16:25:16 +00:00
`#1094 <https://github.com/fmtlib/fmt/pull/1094>`_,
`#1101 <https://github.com/fmtlib/fmt/issues/1101>`_,
2019-08-04 17:38:33 +00:00
`#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>`_,
2019-08-10 16:25:16 +00:00
`#1118 <https://github.com/fmtlib/fmt/issues/1118>`_,
2019-08-04 17:38:33 +00:00
`#1120 <https://github.com/fmtlib/fmt/issues/1120>`_,
2019-08-10 16:25:16 +00:00
`#1123 <https://github.com/fmtlib/fmt/issues/1123>`_,
2019-08-05 12:37:44 +00:00
`#1139 <https://github.com/fmtlib/fmt/pull/1139>`_,
2019-08-10 16:25:16 +00:00
`#1140 <https://github.com/fmtlib/fmt/issues/1140>`_,
`#1143 <https://github.com/fmtlib/fmt/issues/1143>`_,
2019-08-05 12:37:44 +00:00
`#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>`_,
2019-08-10 14:59:33 +00:00
`#1156 <https://github.com/fmtlib/fmt/issues/1156>`_,
`#1159 <https://github.com/fmtlib/fmt/pull/1159>`_,
2019-08-10 16:25:16 +00:00
`#1175 <https://github.com/fmtlib/fmt/issues/1175>`_,
`#1181 <https://github.com/fmtlib/fmt/issues/1181>`_,
2019-08-10 14:59:33 +00:00
`#1186 <https://github.com/fmtlib/fmt/issues/1186>`_,
`#1187 <https://github.com/fmtlib/fmt/pull/1187>`_,
`#1191 <https://github.com/fmtlib/fmt/pull/1191>`_,
2019-08-10 16:25:16 +00:00
`#1197 <https://github.com/fmtlib/fmt/issues/1197>`_,
2019-08-10 14:59:33 +00:00
`#1200 <https://github.com/fmtlib/fmt/issues/1200>`_,
2019-08-10 16:25:16 +00:00
`#1203 <https://github.com/fmtlib/fmt/issues/1203>`_,
`#1205 <https://github.com/fmtlib/fmt/issues/1205>`_,
2019-08-10 14:59:33 +00:00
`#1206 <https://github.com/fmtlib/fmt/pull/1206>`_,
2019-08-10 16:25:16 +00:00
`#1213 <https://github.com/fmtlib/fmt/issues/1213>`_,
2019-08-10 14:59:33 +00:00
`#1214 <https://github.com/fmtlib/fmt/issues/1214>`_,
2019-08-10 16:25:16 +00:00
`#1217 <https://github.com/fmtlib/fmt/pull/1217>`_,
`#1228 <https://github.com/fmtlib/fmt/issues/1228>`_,
2019-08-10 14:59:33 +00:00
`#1230 <https://github.com/fmtlib/fmt/pull/1230>`_,
`#1232 <https://github.com/fmtlib/fmt/issues/1232>`_,
`#1235 <https://github.com/fmtlib/fmt/pull/1235>`_,
2019-08-10 16:25:16 +00:00
`#1236 <https://github.com/fmtlib/fmt/pull/1236>`_,
`#1240 <https://github.com/fmtlib/fmt/issues/1240>`_).
2019-07-25 15:44:40 +00:00
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_,
2019-08-04 16:20:49 +00:00
`@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>`_,
2019-08-04 17:38:33 +00:00
`@chronoxor (Ivan Shynkarenka) <https://github.com/chronoxor>`_,
2019-08-05 12:37:44 +00:00
`@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>`_,
2019-08-10 14:59:33 +00:00
`@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>`_,
2019-08-10 16:56:13 +00:00
`@DaanDeMeyer (Daan De Meyer) <https://github.com/DaanDeMeyer>`_,
`@starkmapper (Mark Stapper) <https://github.com/starkmapper>`_.
2019-07-25 15:44:40 +00:00
2018-12-28 20:31:41 +00:00
5.3.0 - 2018-12-28
------------------
2018-12-24 17:37:52 +00:00
2018-12-24 19:47:06 +00:00
* Introduced experimental chrono formatting support:
.. code:: c++
#include <fmt/chrono.h>
int main() {
using namespace std::literals::chrono_literals;
fmt::print("Default format: {} {}\n", 42s, 100ms);
fmt::print("strftime-like format: {:%H:%M:%S}\n", 3h + 15min + 30s);
}
prints::
Default format: 42s 100ms
strftime-like format: 03:15:30
* Added experimental support for emphasis (bold, italic, underline,
strikethrough), colored output to a file stream, and improved colored
formatting API
(`#961 <https://github.com/fmtlib/fmt/pull/961>`_,
`#967 <https://github.com/fmtlib/fmt/pull/967>`_,
`#973 <https://github.com/fmtlib/fmt/pull/973>`_):
.. code:: c++
#include <fmt/color.h>
int main() {
print(fg(fmt::color::crimson) | fmt::emphasis::bold,
"Hello, {}!\n", "world");
print(fg(fmt::color::floral_white) | bg(fmt::color::slate_gray) |
fmt::emphasis::underline, "Hello, {}!\n", "мир");
print(fg(fmt::color::steel_blue) | fmt::emphasis::italic,
"Hello, {}!\n", "世界");
}
prints the following on modern terminals with RGB color support:
.. image:: https://user-images.githubusercontent.com/576385/
50405788-b66e7500-076e-11e9-9592-7324d1f951d8.png
Thanks `@Rakete1111 (Nicolas) <https://github.com/Rakete1111>`_.
* Added support for 4-bit terminal colors
(`#968 <https://github.com/fmtlib/fmt/issues/968>`_,
2018-12-24 19:51:20 +00:00
`#974 <https://github.com/fmtlib/fmt/pull/974>`_)
2018-12-24 19:47:06 +00:00
.. code:: c++
#include <fmt/color.h>
int main() {
print(fg(fmt::terminal_color::red), "stop\n");
}
2018-12-24 19:48:41 +00:00
Note that these colors vary by terminal:
2018-12-24 19:47:06 +00:00
2018-12-24 19:48:41 +00:00
.. image:: https://user-images.githubusercontent.com/576385/
50405925-dbfc7e00-0770-11e9-9b85-333fab0af9ac.png
2018-12-24 19:47:06 +00:00
2018-12-24 19:48:41 +00:00
Thanks `@Rakete1111 (Nicolas) <https://github.com/Rakete1111>`_.
2018-12-24 19:47:06 +00:00
2018-12-24 18:02:41 +00:00
* Parameterized formatting functions on the type of the format string
2018-12-24 17:37:52 +00:00
(`#880 <https://github.com/fmtlib/fmt/issues/880>`_,
2018-12-24 18:02:41 +00:00
`#881 <https://github.com/fmtlib/fmt/pull/881>`_,
`#883 <https://github.com/fmtlib/fmt/pull/883>`_,
2018-12-24 18:56:13 +00:00
`#885 <https://github.com/fmtlib/fmt/pull/885>`_,
`#897 <https://github.com/fmtlib/fmt/pull/897>`_,
`#920 <https://github.com/fmtlib/fmt/issues/920>`_).
2018-12-24 19:51:20 +00:00
Any object of type ``S`` that has an overloaded ``to_string_view(const S&)``
2018-12-24 19:47:06 +00:00
returning ``fmt::string_view`` can be used as a format string:
2018-12-24 17:37:52 +00:00
.. code:: c++
namespace my_ns {
2018-12-24 18:02:41 +00:00
inline string_view to_string_view(const my_string& s) {
return {s.data(), s.length()};
2018-12-24 17:37:52 +00:00
}
}
2018-12-24 18:02:41 +00:00
std::string message = fmt::format(my_string("The answer is {}."), 42);
2018-12-24 17:37:52 +00:00
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_.
2018-12-24 19:56:48 +00:00
* Made ``std::string_view`` work as a format string
2018-12-24 18:02:41 +00:00
(`#898 <https://github.com/fmtlib/fmt/pull/898>`_):
.. code:: c++
auto message = fmt::format(std::string_view("The answer is {}."), 42);
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_.
2018-12-24 18:56:13 +00:00
* Added wide string support to compile-time format string checks
(`#924 <https://github.com/fmtlib/fmt/pull/924>`_):
.. code:: c++
2018-12-24 18:02:41 +00:00
2018-12-24 18:56:13 +00:00
print(fmt(L"{:f}"), 42); // compile-time error: invalid type specifier
Thanks `@XZiar <https://github.com/XZiar>`_.
2018-12-24 18:02:41 +00:00
2018-12-24 17:37:52 +00:00
* Made colored print functions work with wide strings
(`#867 <https://github.com/fmtlib/fmt/pull/867>`_):
.. code:: c++
#include <fmt/color.h>
int main() {
print(fg(fmt::color::red), L"{}\n", 42);
}
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_.
2018-12-24 18:56:13 +00:00
* Introduced experimental Unicode support
(`#628 <https://github.com/fmtlib/fmt/issues/628>`_,
`#891 <https://github.com/fmtlib/fmt/pull/891>`_):
.. code:: c++
using namespace fmt::literals;
auto s = fmt::format("{:*^5}"_u, "🤡"_u); // s == "**🤡**"_u
* Improved locale support:
.. code:: c++
#include <fmt/locale.h>
struct numpunct : std::numpunct<char> {
protected:
char do_thousands_sep() const override { return '~'; }
};
std::locale loc;
auto s = fmt::format(std::locale(loc, new numpunct()), "{:n}", 1234567);
// s == "1~234~567"
* Constrained formatting functions on proper iterator types
2018-12-28 21:09:31 +00:00
(`#921 <https://github.com/fmtlib/fmt/pull/921>`_).
2018-12-24 18:56:13 +00:00
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_.
* Added ``make_printf_args`` and ``make_wprintf_args`` functions
(`#934 <https://github.com/fmtlib/fmt/pull/934>`_).
Thanks `@tnovotny <https://github.com/tnovotny>`_.
* Deprecated ``fmt::visit``, ``parse_context``, and ``wparse_context``.
Use ``fmt::visit_format_arg``, ``format_parse_context``, and
``wformat_parse_context`` instead.
* Removed undocumented ``basic_fixed_buffer`` which has been superseded by the
iterator-based API
(`#873 <https://github.com/fmtlib/fmt/issues/873>`_,
`#902 <https://github.com/fmtlib/fmt/pull/902>`_).
Thanks `@superfunc (hollywood programmer) <https://github.com/superfunc>`_.
* Disallowed repeated leading zeros in an argument ID:
.. code:: c++
fmt::print("{000}", 42); // error
2018-12-24 18:02:41 +00:00
2018-12-24 17:37:52 +00:00
* Reintroduced support for gcc 4.4.
* Fixed compilation on platforms with exotic ``double``
(`#878 <https://github.com/fmtlib/fmt/issues/878>`_).
2018-12-24 18:02:41 +00:00
* Improved documentation
2018-12-24 19:47:06 +00:00
(`#164 <https://github.com/fmtlib/fmt/issues/164>`_,
`#877 <https://github.com/fmtlib/fmt/issues/877>`_,
2018-12-24 18:56:13 +00:00
`#901 <https://github.com/fmtlib/fmt/pull/901>`_,
2018-12-24 19:47:06 +00:00
`#906 <https://github.com/fmtlib/fmt/pull/906>`_,
`#979 <https://github.com/fmtlib/fmt/pull/979>`_).
2018-12-24 18:56:13 +00:00
Thanks `@kookjr (Mathew Cucuzella) <https://github.com/kookjr>`_,
2018-12-24 19:47:06 +00:00
`@DarkDimius (Dmitry Petrashko) <https://github.com/DarkDimius>`_,
`@HecticSerenity <https://github.com/HecticSerenity>`_.
2018-12-24 18:56:13 +00:00
* Added pkgconfig support which makes it easier to consume the library from
meson and other build systems
2018-12-24 18:56:13 +00:00
(`#916 <https://github.com/fmtlib/fmt/pull/916>`_).
2018-12-24 19:47:06 +00:00
Thanks `@colemickens (Cole Mickens) <https://github.com/colemickens>`_.
2018-12-24 18:56:13 +00:00
2018-12-24 19:47:06 +00:00
* Various build improvements
2018-12-24 18:56:13 +00:00
(`#909 <https://github.com/fmtlib/fmt/pull/909>`_,
`#926 <https://github.com/fmtlib/fmt/pull/926>`_,
2018-12-24 19:47:06 +00:00
`#937 <https://github.com/fmtlib/fmt/pull/937>`_,
`#953 <https://github.com/fmtlib/fmt/pull/953>`_,
`#959 <https://github.com/fmtlib/fmt/pull/959>`_).
2018-12-24 18:56:13 +00:00
Thanks `@tchaikov (Kefu Chai) <https://github.com/tchaikov>`_,
`@luncliff (Park DongHa) <https://github.com/luncliff>`_,
2018-12-24 19:47:06 +00:00
`@AndreasSchoenle (Andreas Schönle) <https://github.com/AndreasSchoenle>`_,
`@hotwatermorning <https://github.com/hotwatermorning>`_,
`@Zefz (JohanJansen) <https://github.com/Zefz>`_.
2018-12-24 18:56:13 +00:00
* Improved ``string_view`` construction performance
2018-12-24 18:56:13 +00:00
(`#914 <https://github.com/fmtlib/fmt/pull/914>`_).
Thanks `@gabime (Gabi Melman) <https://github.com/gabime>`_.
2018-12-24 18:02:41 +00:00
* Fixed non-matching char types
(`#895 <https://github.com/fmtlib/fmt/pull/895>`_).
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_.
2018-12-24 17:37:52 +00:00
2018-12-24 18:56:13 +00:00
* Fixed ``format_to_n`` with ``std::back_insert_iterator``
(`#913 <https://github.com/fmtlib/fmt/pull/913>`_).
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_.
* Fixed locale-dependent formatting
(`#905 <https://github.com/fmtlib/fmt/issues/905>`_).
2018-12-24 17:37:52 +00:00
* Fixed various compiler warnings and errors
(`#882 <https://github.com/fmtlib/fmt/pull/882>`_,
2018-12-24 18:56:13 +00:00
`#886 <https://github.com/fmtlib/fmt/pull/886>`_,
`#933 <https://github.com/fmtlib/fmt/pull/933>`_,
`#941 <https://github.com/fmtlib/fmt/pull/941>`_,
2018-12-24 19:47:06 +00:00
`#931 <https://github.com/fmtlib/fmt/issues/931>`_,
`#943 <https://github.com/fmtlib/fmt/pull/943>`_,
`#954 <https://github.com/fmtlib/fmt/pull/954>`_,
`#956 <https://github.com/fmtlib/fmt/pull/956>`_,
`#962 <https://github.com/fmtlib/fmt/pull/962>`_,
`#965 <https://github.com/fmtlib/fmt/issues/965>`_,
`#977 <https://github.com/fmtlib/fmt/issues/977>`_,
`#983 <https://github.com/fmtlib/fmt/pull/983>`_,
`#989 <https://github.com/fmtlib/fmt/pull/989>`_).
2018-12-24 17:37:52 +00:00
Thanks `@Luthaf (Guillaume Fraux) <https://github.com/Luthaf>`_,
2018-12-24 18:56:13 +00:00
`@stevenhoving (Steven Hoving) <https://github.com/stevenhoving>`_,
`@christinaa (Kristina Brooks) <https://github.com/christinaa>`_,
2018-12-24 19:47:06 +00:00
`@lgritz (Larry Gritz) <https://github.com/lgritz>`_,
`@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_,
`@0x8000-0000 (Sign Bit) <https://github.com/0x8000-0000>`_,
`@liuping1997 <https://github.com/liuping1997>`_.
2018-12-24 17:37:52 +00:00
2018-09-21 17:18:51 +00:00
5.2.1 - 2018-09-21
------------------
2018-09-21 15:17:26 +00:00
* Fixed ``visit`` lookup issues on gcc 7 & 8
(`#870 <https://github.com/fmtlib/fmt/pull/870>`_).
Thanks `@medithe <https://github.com/medithe>`_.
* Fixed linkage errors on older gcc.
* Prevented ``fmt/range.h`` from specializing ``fmt::basic_string_view``
(`#865 <https://github.com/fmtlib/fmt/issues/865>`_,
`#868 <https://github.com/fmtlib/fmt/pull/868>`_).
Thanks `@hhggit (dual) <https://github.com/hhggit>`_.
* Improved error message when formatting unknown types
(`#872 <https://github.com/fmtlib/fmt/pull/872>`_).
Thanks `@foonathan (Jonathan Müller) <https://github.com/foonathan>`_,
* Disabled templated user-defined literals when compiled under nvcc
(`#875 <https://github.com/fmtlib/fmt/pull/875>`_).
Thanks `@CandyGumdrop (Candy Gumdrop) <https://github.com/CandyGumdrop>`_,
* Fixed ``format_to`` formatting to ``wmemory_buffer``
(`#874 <https://github.com/fmtlib/fmt/issues/874>`_).
2018-09-13 14:28:20 +00:00
5.2.0 - 2018-09-13
------------------
2018-08-11 14:12:52 +00:00
2018-09-13 00:34:16 +00:00
* Optimized format string parsing and argument processing which resulted in up
to 5x speed up on long format strings and significant performance boost on
2018-09-13 02:00:26 +00:00
various benchmarks. For example, version 5.2 is 2.22x faster than 5.1 on
2018-09-13 00:34:16 +00:00
decimal integer formatting with ``format_to`` (macOS, clang-902.0.39.2):
================== ======= =======
Method Time, s Speedup
================== ======= =======
fmt::format 5.1 0.58
2018-09-13 02:00:26 +00:00
fmt::format 5.2 0.35 1.66x
2018-09-13 00:34:16 +00:00
fmt::format_to 5.1 0.51
2018-09-13 02:00:26 +00:00
fmt::format_to 5.2 0.23 2.22x
2018-09-13 00:34:16 +00:00
sprintf 0.71
2018-09-13 01:28:26 +00:00
std::to_string 1.01
std::stringstream 1.73
2018-09-13 00:34:16 +00:00
================== ======= =======
2018-09-12 17:39:08 +00:00
* Changed the ``fmt`` macro from opt-out to opt-in to prevent name collisions.
To enable it define the ``FMT_STRING_ALIAS`` macro to 1 before including
``fmt/format.h``:
.. code:: c++
#define FMT_STRING_ALIAS 1
#include <fmt/format.h>
std::string answer = format(fmt("{}"), 42);
2018-09-12 17:39:08 +00:00
* Added compile-time format string checks to ``format_to`` overload that takes
``fmt::memory_buffer`` (`#783 <https://github.com/fmtlib/fmt/issues/783>`_):
2018-09-12 17:39:08 +00:00
.. code:: c++
fmt::memory_buffer buf;
// Compile-time error: invalid type specifier.
fmt::format_to(buf, fmt("{:d}"), "foo");
* Moved experimental color support to ``fmt/color.h`` and enabled the
new API by default. The old API can be enabled by defining the
``FMT_DEPRECATED_COLORS`` macro.
2018-09-12 17:39:08 +00:00
* Added formatting support for types explicitly convertible to
``fmt::string_view``:
.. code:: c++
struct foo {
explicit operator fmt::string_view() const { return "foo"; }
};
auto s = format("{}", foo());
In particular, this makes formatting function work with
``folly::StringPiece``.
* Implemented preliminary support for ``char*_t`` by replacing the ``format``
function overloads with a single function template parameterized on the string
type.
2018-08-11 14:12:52 +00:00
* Added support for dynamic argument lists
(`#814 <https://github.com/fmtlib/fmt/issues/814>`_,
2018-09-12 17:39:08 +00:00
`#819 <https://github.com/fmtlib/fmt/pull/819>`_).
2018-08-11 14:12:52 +00:00
Thanks `@MikePopoloski (Michael Popoloski)
<https://github.com/MikePopoloski>`_.
* Reduced executable size overhead for embedded targets using newlib nano by
making locale dependency optional
(`#839 <https://github.com/fmtlib/fmt/pull/839>`_).
Thanks `@teajay-fr (Thomas Benard) <https://github.com/teajay-fr>`_.
2018-09-12 17:39:08 +00:00
* Keep ``noexcept`` specifier when exceptions are disabled
(`#801 <https://github.com/fmtlib/fmt/issues/801>`_,
`#810 <https://github.com/fmtlib/fmt/pull/810>`_).
Thanks `@qis (Alexej Harm) <https://github.com/qis>`_.
* Fixed formatting of user-defined types providing ``operator<<`` with
``format_to_n``
(`#806 <https://github.com/fmtlib/fmt/pull/806>`_).
Thanks `@mkurdej (Marek Kurdej) <https://github.com/mkurdej>`_.
* Fixed dynamic linkage of new symbols
(`#808 <https://github.com/fmtlib/fmt/issues/808>`_).
* Fixed global initialization issue
(`#807 <https://github.com/fmtlib/fmt/issues/807>`_):
.. code:: c++
// This works on compilers with constexpr support.
static const std::string answer = fmt::format("{}", 42);
* Fixed various compiler warnings and errors
(`#804 <https://github.com/fmtlib/fmt/pull/804>`_,
`#809 <https://github.com/fmtlib/fmt/issues/809>`_,
`#811 <https://github.com/fmtlib/fmt/pull/811>`_,
`#822 <https://github.com/fmtlib/fmt/issues/822>`_,
`#827 <https://github.com/fmtlib/fmt/pull/827>`_,
`#830 <https://github.com/fmtlib/fmt/issues/830>`_,
`#838 <https://github.com/fmtlib/fmt/pull/838>`_,
`#843 <https://github.com/fmtlib/fmt/issues/843>`_,
`#844 <https://github.com/fmtlib/fmt/pull/844>`_,
`#851 <https://github.com/fmtlib/fmt/issues/851>`_,
`#852 <https://github.com/fmtlib/fmt/pull/852>`_,
`#854 <https://github.com/fmtlib/fmt/pull/854>`_).
Thanks `@henryiii (Henry Schreiner) <https://github.com/henryiii>`_,
`@medithe <https://github.com/medithe>`_, and
`@eliasdaler (Elias Daler) <https://github.com/eliasdaler>`_.
2018-09-12 17:39:08 +00:00
2018-07-05 13:22:54 +00:00
5.1.0 - 2018-07-05
------------------
2018-07-04 23:00:06 +00:00
* Added experimental support for RGB color output enabled with
the ``FMT_EXTENDED_COLORS`` macro:
.. code:: c++
#define FMT_EXTENDED_COLORS
#define FMT_HEADER_ONLY // or compile fmt with FMT_EXTENDED_COLORS defined
#include <fmt/format.h>
fmt::print(fmt::color::steel_blue, "Some beautiful text");
The old API (the ``print_colored`` and ``vprint_colored`` functions and the
``color`` enum) is now deprecated.
(`#762 <https://github.com/fmtlib/fmt/issues/762>`_
`#767 <https://github.com/fmtlib/fmt/pull/767>`_).
2019-08-24 13:46:43 +00:00
thanks `@Remotion (Remo) <https://github.com/Remotion>`_.
2018-07-04 23:00:06 +00:00
* Added quotes to strings in ranges and tuples
(`#766 <https://github.com/fmtlib/fmt/pull/766>`_).
Thanks `@Remotion (Remo) <https://github.com/Remotion>`_.
* Made ``format_to`` work with ``basic_memory_buffer``
(`#776 <https://github.com/fmtlib/fmt/issues/776>`_).
* Added ``vformat_to_n`` and ``wchar_t`` overload of ``format_to_n``
(`#764 <https://github.com/fmtlib/fmt/issues/764>`_,
`#769 <https://github.com/fmtlib/fmt/issues/769>`_).
* Made ``is_range`` and ``is_tuple_like`` part of public (experimental) API
to allow specialization for user-defined types
(`#751 <https://github.com/fmtlib/fmt/issues/751>`_,
`#759 <https://github.com/fmtlib/fmt/pull/759>`_).
Thanks `@drrlvn (Dror Levin) <https://github.com/drrlvn>`_.
* Added more compilers to continuous integration and increased ``FMT_PEDANTIC``
warning levels
(`#736 <https://github.com/fmtlib/fmt/pull/736>`_).
Thanks `@eliaskosunen (Elias Kosunen) <https://github.com/eliaskosunen>`_.
* Fixed compilation with MSVC 2013.
* Fixed handling of user-defined types in ``format_to``
(`#793 <https://github.com/fmtlib/fmt/issues/793>`_).
* Forced linking of inline ``vformat`` functions into the library
(`#795 <https://github.com/fmtlib/fmt/issues/795>`_).
* Fixed incorrect call to on_align in ``'{:}='``
(`#750 <https://github.com/fmtlib/fmt/issues/750>`_).
* Fixed floating-point formatting to a non-back_insert_iterator with sign &
numeric alignment specified
(`#756 <https://github.com/fmtlib/fmt/issues/756>`_).
* Fixed formatting to an array with ``format_to_n``
(`#778 <https://github.com/fmtlib/fmt/issues/778>`_).
* Fixed formatting of more than 15 named arguments
(`#754 <https://github.com/fmtlib/fmt/issues/754>`_).
* Fixed handling of compile-time strings when including ``fmt/ostream.h``.
(`#768 <https://github.com/fmtlib/fmt/issues/768>`_).
* Fixed various compiler warnings and errors
(`#742 <https://github.com/fmtlib/fmt/issues/742>`_,
`#748 <https://github.com/fmtlib/fmt/issues/748>`_,
`#752 <https://github.com/fmtlib/fmt/issues/752>`_,
`#770 <https://github.com/fmtlib/fmt/issues/770>`_,
`#775 <https://github.com/fmtlib/fmt/pull/775>`_,
`#779 <https://github.com/fmtlib/fmt/issues/779>`_,
`#780 <https://github.com/fmtlib/fmt/pull/780>`_,
`#790 <https://github.com/fmtlib/fmt/pull/790>`_,
2018-07-05 00:47:46 +00:00
`#792 <https://github.com/fmtlib/fmt/pull/792>`_,
`#800 <https://github.com/fmtlib/fmt/pull/800>`_).
2018-07-04 23:00:06 +00:00
Thanks `@Remotion (Remo) <https://github.com/Remotion>`_,
`@gabime (Gabi Melman) <https://github.com/gabime>`_,
2018-07-05 00:47:46 +00:00
`@foonathan (Jonathan Müller) <https://github.com/foonathan>`_,
`@Dark-Passenger (Dhruv Paranjape) <https://github.com/Dark-Passenger>`_, and
`@0x8000-0000 (Sign Bit) <https://github.com/0x8000-0000>`_.
2018-07-04 23:00:06 +00:00
2018-05-22 04:00:04 +00:00
5.0.0 - 2018-05-21
------------------
2018-05-12 16:10:11 +00:00
2018-05-13 19:42:55 +00:00
* Added a requirement for partial C++11 support, most importantly variadic
templates and type traits, and dropped ``FMT_VARIADIC_*`` emulation macros.
Variadic templates are available since GCC 4.4, Clang 2.9 and MSVC 18.0 (2013).
For older compilers use {fmt} `version 4.x
2018-05-13 15:53:16 +00:00
<https://github.com/fmtlib/fmt/releases/tag/4.1.0>`_ which continues to be
2018-05-13 19:42:55 +00:00
maintained and works with C++98 compilers.
2018-05-12 16:10:11 +00:00
2018-05-13 15:53:16 +00:00
* Renamed symbols to follow standard C++ naming conventions and proposed a subset
of the library for standardization in `P0645R2 Text Formatting
<https://wg21.link/P0645>`_.
2018-05-12 16:10:11 +00:00
2018-05-19 17:31:49 +00:00
* Implemented ``constexpr`` parsing of format strings and `compile-time format
string checks
2019-05-17 22:42:00 +00:00
<https://fmt.dev/dev/api.html#compile-time-format-string-checks>`_. For
2018-05-19 17:31:49 +00:00
example
.. code:: c++
#include <fmt/format.h>
2018-05-20 23:00:39 +00:00
2018-05-19 17:31:49 +00:00
std::string s = format(fmt("{:d}"), "foo");
2018-05-19 18:46:55 +00:00
gives a compile-time error because ``d`` is an invalid specifier for strings
2018-05-22 03:38:07 +00:00
(`godbolt <https://godbolt.org/g/rnCy9Q>`__)::
2018-05-19 17:31:49 +00:00
...
<source>:4:19: note: in instantiation of function template specialization 'fmt::v5::format<S, char [4]>' requested here
std::string s = format(fmt("{:d}"), "foo");
^
format.h:1337:13: note: non-constexpr function 'on_error' cannot be used in a constant expression
handler.on_error("invalid type specifier");
2018-05-13 19:42:55 +00:00
2018-05-19 18:46:55 +00:00
Compile-time checks require relaxed ``constexpr`` (C++14 feature) support. If
the latter is not available, checks will be performed at runtime.
2018-05-13 19:42:55 +00:00
* Separated format string parsing and formatting in the extension API to enable
compile-time format string processing. For example
2018-05-13 15:53:16 +00:00
.. code:: c++
2018-05-22 03:27:58 +00:00
struct Answer {};
2018-05-13 15:53:16 +00:00
namespace fmt {
template <>
2018-05-22 03:27:58 +00:00
struct formatter<Answer> {
2018-05-13 15:53:16 +00:00
constexpr auto parse(parse_context& ctx) {
auto it = ctx.begin();
spec = *it;
if (spec != 'd' && spec != 's')
throw format_error("invalid specifier");
2018-05-13 19:42:55 +00:00
return ++it;
2018-05-13 15:53:16 +00:00
}
template <typename FormatContext>
2018-05-22 03:27:58 +00:00
auto format(Answer, FormatContext& ctx) {
2018-05-13 15:53:16 +00:00
return spec == 's' ?
format_to(ctx.begin(), "{}", "fourty-two") :
format_to(ctx.begin(), "{}", 42);
}
char spec = 0;
};
}
2018-05-22 03:27:58 +00:00
std::string s = format(fmt("{:x}"), Answer());
2018-05-13 15:53:16 +00:00
2018-05-19 17:31:49 +00:00
gives a compile-time error due to invalid format specifier (`godbolt
2018-05-22 03:38:07 +00:00
<https://godbolt.org/g/2jQ1Dv>`__)::
2018-05-13 15:53:16 +00:00
...
<source>:12:45: error: expression '<throw-expression>' is not a constant expression
throw format_error("invalid specifier");
2018-05-16 14:58:43 +00:00
* Added `iterator support
2019-05-17 22:42:00 +00:00
<https://fmt.dev/dev/api.html#output-iterator-support>`_:
2018-05-16 14:58:43 +00:00
.. code:: c++
#include <vector>
#include <fmt/format.h>
std::vector<char> out;
fmt::format_to(std::back_inserter(out), "{}", 42);
2018-05-19 18:46:55 +00:00
* Added the `format_to_n
2019-05-17 22:42:00 +00:00
<https://fmt.dev/dev/api.html#_CPPv2N3fmt11format_to_nE8OutputItNSt6size_tE11string_viewDpRK4Args>`_
2018-05-19 18:46:55 +00:00
function that restricts the output to the specified number of characters
(`#298 <https://github.com/fmtlib/fmt/issues/298>`_):
.. code:: c++
char out[4];
fmt::format_to_n(out, sizeof(out), "{}", 12345);
// out == "1234" (without terminating '\0')
2018-05-16 15:19:26 +00:00
* Added the `formatted_size
2019-05-17 22:42:00 +00:00
<https://fmt.dev/dev/api.html#_CPPv2N3fmt14formatted_sizeE11string_viewDpRK4Args>`_
2018-05-19 14:13:06 +00:00
function for computing the output size:
2018-05-16 15:19:26 +00:00
.. code:: c++
#include <fmt/format.h>
auto size = fmt::formatted_size("{}", 12345); // size == 5
2018-05-13 19:42:55 +00:00
* Improved compile times by reducing dependencies on standard headers and
2019-05-17 22:42:00 +00:00
providing a lightweight `core API <https://fmt.dev/dev/api.html#core-api>`_:
2018-05-13 19:42:55 +00:00
.. code:: c++
#include <fmt/core.h>
fmt::print("The answer is {}.", 42);
See `Compile time and code bloat
<https://github.com/fmtlib/fmt#compile-time-and-code-bloat>`_.
2018-05-13 15:53:16 +00:00
* Added the `make_format_args
2019-05-17 22:42:00 +00:00
<https://fmt.dev/dev/api.html#_CPPv2N3fmt16make_format_argsEDpRK4Args>`_
2018-05-13 15:53:16 +00:00
function for capturing formatting arguments:
2018-05-12 16:10:11 +00:00
.. code:: c++
// Prints formatted error message.
void vreport_error(const char *format, fmt::format_args args) {
fmt::print("Error: ");
fmt::vprint(format, args);
}
template <typename... Args>
void report_error(const char *format, const Args & ... args) {
vreport_error(format, fmt::make_format_args(args...));
}
2018-07-04 23:00:06 +00:00
* Added the ``make_printf_args`` function for capturing ``printf`` arguments
(`#687 <https://github.com/fmtlib/fmt/issues/687>`_,
2018-05-20 23:00:39 +00:00
`#694 <https://github.com/fmtlib/fmt/pull/694>`_).
2018-05-19 18:46:55 +00:00
Thanks `@Kronuz (Germán Méndez Bravo) <https://github.com/Kronuz>`_.
2018-05-13 15:53:16 +00:00
* Added prefix ``v`` to non-variadic functions taking ``format_args`` to
distinguish them from variadic ones:
2018-05-12 16:10:11 +00:00
.. code:: c++
std::string vformat(string_view format_str, format_args args);
template <typename... Args>
2018-05-12 16:42:59 +00:00
std::string format(string_view format_str, const Args & ... args);
2018-05-20 23:00:39 +00:00
* Added experimental support for formatting ranges, containers and tuple-like
types in ``fmt/ranges.h`` (`#735 <https://github.com/fmtlib/fmt/pull/735>`_):
.. code:: c++
#include <fmt/ranges.h>
std::vector<int> v = {1, 2, 3};
fmt::print("{}", v); // prints {1, 2, 3}
Thanks `@Remotion (Remo) <https://github.com/Remotion>`_.
* Implemented ``wchar_t`` date and time formatting
(`#712 <https://github.com/fmtlib/fmt/pull/712>`_):
.. code:: c++
#include <fmt/time.h>
std::time_t t = std::time(nullptr);
auto s = fmt::format(L"The date is {:%Y-%m-%d}.", *std::localtime(&t));
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_.
* Provided more wide string overloads
(`#724 <https://github.com/fmtlib/fmt/pull/724>`_).
Thanks `@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_.
2018-05-13 15:53:16 +00:00
* Switched from a custom null-terminated string view class to ``string_view``
in the format API and provided ``fmt::string_view`` which implements a subset
of ``std::string_view`` API for pre-C++17 systems.
2018-05-16 14:58:43 +00:00
* Added support for ``std::experimental::string_view``
(`#607 <https://github.com/fmtlib/fmt/pull/607>`_):
.. code:: c++
#include <fmt/core.h>
#include <experimental/string_view>
fmt::print("{}", std::experimental::string_view("foo"));
Thanks `@virgiliofornazin (Virgilio Alexandre Fornazin)
2018-05-22 03:38:07 +00:00
<https://github.com/virgiliofornazin>`__.
2018-05-16 14:58:43 +00:00
2018-05-13 19:42:55 +00:00
* Allowed mixing named and automatic arguments:
.. code:: c++
fmt::format("{} {two}", 1, fmt::arg("two", 2));
2018-05-13 15:53:16 +00:00
* Removed the write API in favor of the `format API
2019-05-17 22:42:00 +00:00
<https://fmt.dev/dev/api.html#format-api>`_ with compile-time handling of
2018-05-13 15:53:16 +00:00
format strings.
2018-05-12 16:42:59 +00:00
2018-05-13 19:42:55 +00:00
* Disallowed formatting of multibyte strings into a wide character target
(`#606 <https://github.com/fmtlib/fmt/pull/606>`_).
2018-07-04 23:00:06 +00:00
* Improved documentation
(`#515 <https://github.com/fmtlib/fmt/pull/515>`_,
2018-05-13 19:42:55 +00:00
`#614 <https://github.com/fmtlib/fmt/issues/614>`_,
2018-05-19 18:46:55 +00:00
`#617 <https://github.com/fmtlib/fmt/pull/617>`_,
`#661 <https://github.com/fmtlib/fmt/pull/661>`_,
`#680 <https://github.com/fmtlib/fmt/pull/680>`_).
Thanks `@ibell (Ian Bell) <https://github.com/ibell>`_,
`@mihaitodor (Mihai Todor) <https://github.com/mihaitodor>`_, and
`@johnthagen <https://github.com/johnthagen>`_.
2018-05-13 19:42:55 +00:00
2018-05-13 15:53:16 +00:00
* Implemented more efficient handling of large number of format arguments.
2018-05-12 23:02:20 +00:00
2018-05-20 23:00:39 +00:00
* Introduced an inline namespace for symbol versioning.
2018-05-22 03:50:23 +00:00
* Added debug postfix ``d`` to the ``fmt`` library name
2018-05-19 14:13:06 +00:00
(`#636 <https://github.com/fmtlib/fmt/issues/636>`_).
2018-05-13 15:53:16 +00:00
* Removed unnecessary ``fmt/`` prefix in includes
(`#397 <https://github.com/fmtlib/fmt/pull/397>`_).
2018-05-12 16:42:59 +00:00
Thanks `@chronoxor (Ivan Shynkarenka) <https://github.com/chronoxor>`_.
2018-05-19 18:46:55 +00:00
* Moved ``fmt/*.h`` to ``include/fmt/*.h`` to prevent irrelevant files and
directories appearing on the include search paths when fmt is used as a
subproject and moved source files to the ``src`` directory.
2018-05-19 14:13:06 +00:00
* Added qmake project file ``support/fmt.pro``
(`#641 <https://github.com/fmtlib/fmt/pull/641>`_).
Thanks `@cowo78 (Giuseppe Corbelli) <https://github.com/cowo78>`_.
2018-05-19 17:31:49 +00:00
* Added Gradle build file ``support/build.gradle``
(`#649 <https://github.com/fmtlib/fmt/pull/649>`_).
Thanks `@luncliff (Park DongHa) <https://github.com/luncliff>`_.
2018-05-19 14:13:06 +00:00
* Removed ``FMT_CPPFORMAT`` CMake option.
2018-01-21 01:39:15 +00:00
2018-05-13 19:42:55 +00:00
* Fixed a name conflict with the macro ``CHAR_WIDTH`` in glibc
(`#616 <https://github.com/fmtlib/fmt/pull/616>`_).
Thanks `@aroig (Abdó Roig-Maranges) <https://github.com/aroig>`_.
2018-05-19 14:13:06 +00:00
* Fixed handling of nested braces in ``fmt::join``
(`#638 <https://github.com/fmtlib/fmt/issues/638>`_).
2018-05-13 15:53:16 +00:00
* Added ``SOURCELINK_SUFFIX`` for compatibility with Sphinx 1.5
(`#497 <https://github.com/fmtlib/fmt/pull/497>`_).
Thanks `@ginggs (Graham Inggs) <https://github.com/ginggs>`_.
2018-05-13 14:22:41 +00:00
2018-05-13 19:42:55 +00:00
* Added a missing ``inline`` in the header-only mode
(`#626 <https://github.com/fmtlib/fmt/pull/626>`_).
Thanks `@aroig (Abdó Roig-Maranges) <https://github.com/aroig>`_.
2018-07-04 23:00:06 +00:00
* Fixed various compiler warnings
(`#640 <https://github.com/fmtlib/fmt/pull/640>`_,
2018-05-19 18:46:55 +00:00
`#656 <https://github.com/fmtlib/fmt/pull/656>`_,
`#679 <https://github.com/fmtlib/fmt/pull/679>`_,
`#681 <https://github.com/fmtlib/fmt/pull/681>`_,
2018-05-22 03:38:07 +00:00
`#705 <https://github.com/fmtlib/fmt/pull/705>`__,
2018-05-20 23:00:39 +00:00
`#715 <https://github.com/fmtlib/fmt/issues/715>`_,
`#717 <https://github.com/fmtlib/fmt/pull/717>`_,
`#720 <https://github.com/fmtlib/fmt/pull/720>`_,
`#723 <https://github.com/fmtlib/fmt/pull/723>`_,
`#726 <https://github.com/fmtlib/fmt/pull/726>`_,
`#730 <https://github.com/fmtlib/fmt/pull/730>`_,
`#739 <https://github.com/fmtlib/fmt/pull/739>`_).
2018-05-19 18:46:55 +00:00
Thanks `@peterbell10 <https://github.com/peterbell10>`_,
`@LarsGullik <https://github.com/LarsGullik>`_,
`@foonathan (Jonathan Müller) <https://github.com/foonathan>`_,
2018-05-20 23:00:39 +00:00
`@eliaskosunen (Elias Kosunen) <https://github.com/eliaskosunen>`_,
`@christianparpart (Christian Parpart) <https://github.com/christianparpart>`_,
`@DanielaE (Daniela Engert) <https://github.com/DanielaE>`_,
and `@mwinterb <https://github.com/mwinterb>`_.
2018-05-19 14:13:06 +00:00
* Worked around an MSVC bug and fixed several warnings
(`#653 <https://github.com/fmtlib/fmt/pull/653>`_).
Thanks `@alabuzhev (Alex Alabuzhev) <https://github.com/alabuzhev>`_.
2018-05-19 18:46:55 +00:00
* Worked around GCC bug 67371
(`#682 <https://github.com/fmtlib/fmt/issues/682>`_).
2018-05-19 14:13:06 +00:00
* Fixed compilation with ``-fno-exceptions``
(`#655 <https://github.com/fmtlib/fmt/pull/655>`_).
Thanks `@chenxiaolong (Andrew Gunnerson) <https://github.com/chenxiaolong>`_.
2018-05-19 17:31:49 +00:00
* Made ``constexpr remove_prefix`` gcc version check tighter
(`#648 <https://github.com/fmtlib/fmt/issues/648>`_).
* Renamed internal type enum constants to prevent collision with poorly written
C libraries (`#644 <https://github.com/fmtlib/fmt/issues/644>`_).
* Added detection of ``wostream operator<<``
(`#650 <https://github.com/fmtlib/fmt/issues/650>`_).
* Fixed compilation on OpenBSD
(`#660 <https://github.com/fmtlib/fmt/pull/660>`_).
Thanks `@hubslave <https://github.com/hubslave>`_.
2018-05-20 23:00:39 +00:00
* Fixed compilation on FreeBSD 12
(`#732 <https://github.com/fmtlib/fmt/pull/732>`_).
Thanks `@dankm <https://github.com/dankm>`_.
2018-05-19 17:31:49 +00:00
* Fixed compilation when there is a mismatch between ``-std`` options between
the library and user code
(`#664 <https://github.com/fmtlib/fmt/issues/664>`_).
2018-05-20 23:00:39 +00:00
* Fixed compilation with GCC 7 and ``-std=c++11``
(`#734 <https://github.com/fmtlib/fmt/issues/734>`_).
2018-05-19 17:31:49 +00:00
* Improved generated binary code on GCC 7 and older
(`#668 <https://github.com/fmtlib/fmt/issues/668>`_).
* Fixed handling of numeric alignment with no width
(`#675 <https://github.com/fmtlib/fmt/issues/675>`_).
2018-05-19 18:46:55 +00:00
* Fixed handling of empty strings in UTF8/16 converters
(`#676 <https://github.com/fmtlib/fmt/pull/676>`_).
Thanks `@vgalka-sl (Vasili Galka) <https://github.com/vgalka-sl>`_.
* Fixed formatting of an empty ``string_view``
(`#689 <https://github.com/fmtlib/fmt/issues/689>`_).
* Fixed detection of ``string_view`` on libc++
(`#686 <https://github.com/fmtlib/fmt/issues/686>`_).
* Fixed DLL issues (`#696 <https://github.com/fmtlib/fmt/pull/696>`_).
Thanks `@sebkoenig <https://github.com/sebkoenig>`_.
* Fixed compile checks for mixing narrow and wide strings
(`#690 <https://github.com/fmtlib/fmt/issues/690>`_).
2018-05-20 23:00:39 +00:00
* Disabled unsafe implicit conversion to ``std::string``
(`#729 <https://github.com/fmtlib/fmt/issues/729>`_).
* Fixed handling of reused format specs (as in ``fmt::join``) for pointers
(`#725 <https://github.com/fmtlib/fmt/pull/725>`_).
Thanks `@mwinterb <https://github.com/mwinterb>`_.
* Fixed installation of ``fmt/ranges.h``
(`#738 <https://github.com/fmtlib/fmt/pull/738>`_).
Thanks `@sv1990 <https://github.com/sv1990>`_.
2018-01-21 01:39:15 +00:00
4.1.0 - 2017-12-20
------------------
* Added ``fmt::to_wstring()`` in addition to ``fmt::to_string()``
(`#559 <https://github.com/fmtlib/fmt/pull/559>`_).
Thanks `@alabuzhev (Alex Alabuzhev) <https://github.com/alabuzhev>`_.
* Added support for C++17 ``std::string_view``
(`#571 <https://github.com/fmtlib/fmt/pull/571>`_ and
`#578 <https://github.com/fmtlib/fmt/pull/578>`_).
Thanks `@thelostt (Mário Feroldi) <https://github.com/thelostt>`_ and
`@mwinterb <https://github.com/mwinterb>`_.
* Enabled stream exceptions to catch errors
(`#581 <https://github.com/fmtlib/fmt/issues/581>`_).
Thanks `@crusader-mike <https://github.com/crusader-mike>`_.
* Allowed formatting of class hierarchies with ``fmt::format_arg()``
(`#547 <https://github.com/fmtlib/fmt/pull/547>`_).
Thanks `@rollbear (Björn Fahller) <https://github.com/rollbear>`_.
* Removed limitations on character types
(`#563 <https://github.com/fmtlib/fmt/pull/563>`_).
Thanks `@Yelnats321 (Elnar Dakeshov) <https://github.com/Yelnats321>`_.
* Conditionally enabled use of ``std::allocator_traits``
(`#583 <https://github.com/fmtlib/fmt/pull/583>`_).
Thanks `@mwinterb <https://github.com/mwinterb>`_.
* Added support for ``const`` variadic member function emulation with
``FMT_VARIADIC_CONST`` (`#591 <https://github.com/fmtlib/fmt/pull/591>`_).
Thanks `@ludekvodicka (Ludek Vodicka) <https://github.com/ludekvodicka>`_.
* Various bugfixes: bad overflow check, unsupported implicit type conversion
when determining formatting function, test segfaults
(`#551 <https://github.com/fmtlib/fmt/issues/551>`_), ill-formed macros
(`#542 <https://github.com/fmtlib/fmt/pull/542>`_) and ambiguous overloads
(`#580 <https://github.com/fmtlib/fmt/issues/580>`_).
Thanks `@xylosper (Byoung-young Lee) <https://github.com/xylosper>`_.
* Prevented warnings on MSVC (`#605 <https://github.com/fmtlib/fmt/pull/605>`_,
`#602 <https://github.com/fmtlib/fmt/pull/602>`_, and
`#545 <https://github.com/fmtlib/fmt/pull/545>`_),
clang (`#582 <https://github.com/fmtlib/fmt/pull/582>`_),
GCC (`#573 <https://github.com/fmtlib/fmt/issues/573>`_),
various conversion warnings (`#609 <https://github.com/fmtlib/fmt/pull/609>`_,
`#567 <https://github.com/fmtlib/fmt/pull/567>`_,
`#553 <https://github.com/fmtlib/fmt/pull/553>`_ and
`#553 <https://github.com/fmtlib/fmt/pull/553>`_), and added ``override`` and
``[[noreturn]]`` (`#549 <https://github.com/fmtlib/fmt/pull/549>`_ and
`#555 <https://github.com/fmtlib/fmt/issues/555>`_).
Thanks `@alabuzhev (Alex Alabuzhev) <https://github.com/alabuzhev>`_,
`@virgiliofornazin (Virgilio Alexandre Fornazin)
<https://gihtub.com/virgiliofornazin>`_,
`@alexanderbock (Alexander Bock) <https://github.com/alexanderbock>`_,
`@yumetodo <https://github.com/yumetodo>`_,
`@VaderY (Császár Mátyás) <https://github.com/VaderY>`_,
`@jpcima (JP Cimalando) <https://github.com/jpcima>`_,
`@thelostt (Mário Feroldi) <https://github.com/thelostt>`_, and
`@Manu343726 (Manu Sánchez) <https://github.com/Manu343726>`_.
2018-05-19 14:13:06 +00:00
* Improved CMake: Used ``GNUInstallDirs`` to set installation location
2018-01-21 01:39:15 +00:00
(`#610 <https://github.com/fmtlib/fmt/pull/610>`_) and fixed warnings
(`#536 <https://github.com/fmtlib/fmt/pull/536>`_ and
`#556 <https://github.com/fmtlib/fmt/pull/556>`_).
Thanks `@mikecrowe (Mike Crowe) <https://github.com/mikecrowe>`_,
`@evgen231 <https://github.com/evgen231>`_ and
`@henryiii (Henry Schreiner) <https://github.com/henryiii>`_.
4.0.0 - 2017-06-27
------------------
* Removed old compatibility headers ``cppformat/*.h`` and CMake options
(`#527 <https://github.com/fmtlib/fmt/pull/527>`_).
Thanks `@maddinat0r (Alex Martin) <https://github.com/maddinat0r>`_.
* Added ``string.h`` containing ``fmt::to_string()`` as alternative to
``std::to_string()`` as well as other string writer functionality
(`#326 <https://github.com/fmtlib/fmt/issues/326>`_ and
`#441 <https://github.com/fmtlib/fmt/pull/441>`_):
.. code:: c++
#include "fmt/string.h"
std::string answer = fmt::to_string(42);
Thanks to `@glebov-andrey (Andrey Glebov)
<https://github.com/glebov-andrey>`_.
* Moved ``fmt::printf()`` to new ``printf.h`` header and allowed ``%s`` as
generic specifier (`#453 <https://github.com/fmtlib/fmt/pull/453>`_),
made ``%.f`` more conformant to regular ``printf()``
(`#490 <https://github.com/fmtlib/fmt/pull/490>`_), added custom writer
support (`#476 <https://github.com/fmtlib/fmt/issues/476>`_) and implemented
missing custom argument formatting
(`#339 <https://github.com/fmtlib/fmt/pull/339>`_ and
`#340 <https://github.com/fmtlib/fmt/pull/340>`_):
.. code:: c++
#include "fmt/printf.h"
// %s format specifier can be used with any argument type.
fmt::printf("%s", 42);
Thanks `@mojoBrendan <https://github.com/mojoBrendan>`_,
`@manylegged (Arthur Danskin) <https://github.com/manylegged>`_ and
`@spacemoose (Glen Stark) <https://github.com/spacemoose>`_.
See also `#360 <https://github.com/fmtlib/fmt/issues/360>`_,
`#335 <https://github.com/fmtlib/fmt/issues/335>`_ and
`#331 <https://github.com/fmtlib/fmt/issues/331>`_.
* Added ``container.h`` containing a ``BasicContainerWriter``
to write to containers like ``std::vector``
(`#450 <https://github.com/fmtlib/fmt/pull/450>`_).
Thanks `@polyvertex (Jean-Charles Lefebvre) <https://github.com/polyvertex>`_.
* Added ``fmt::join()`` function that takes a range and formats
its elements separated by a given string
(`#466 <https://github.com/fmtlib/fmt/pull/466>`_):
.. code:: c++
#include "fmt/format.h"
std::vector<double> v = {1.2, 3.4, 5.6};
// Prints "(+01.20, +03.40, +05.60)".
fmt::print("({:+06.2f})", fmt::join(v.begin(), v.end(), ", "));
Thanks `@olivier80 <https://github.com/olivier80>`_.
* Added support for custom formatting specifications to simplify customization
of built-in formatting (`#444 <https://github.com/fmtlib/fmt/pull/444>`_).
Thanks `@polyvertex (Jean-Charles Lefebvre) <https://github.com/polyvertex>`_.
See also `#439 <https://github.com/fmtlib/fmt/issues/439>`_.
* Added ``fmt::format_system_error()`` for error code formatting
(`#323 <https://github.com/fmtlib/fmt/issues/323>`_ and
`#526 <https://github.com/fmtlib/fmt/pull/526>`_).
Thanks `@maddinat0r (Alex Martin) <https://github.com/maddinat0r>`_.
* Added thread-safe ``fmt::localtime()`` and ``fmt::gmtime()``
as replacement for the standard version to ``time.h``
(`#396 <https://github.com/fmtlib/fmt/pull/396>`_).
Thanks `@codicodi <https://github.com/codicodi>`_.
* Internal improvements to ``NamedArg`` and ``ArgLists``
(`#389 <https://github.com/fmtlib/fmt/pull/389>`_ and
`#390 <https://github.com/fmtlib/fmt/pull/390>`_).
Thanks `@chronoxor <https://github.com/chronoxor>`_.
* Fixed crash due to bug in ``FormatBuf``
(`#493 <https://github.com/fmtlib/fmt/pull/493>`_).
Thanks `@effzeh <https://github.com/effzeh>`_. See also
`#480 <https://github.com/fmtlib/fmt/issues/480>`_ and
`#491 <https://github.com/fmtlib/fmt/issues/491>`_.
* Fixed handling of wide strings in ``fmt::StringWriter``.
* Improved compiler error messages
(`#357 <https://github.com/fmtlib/fmt/issues/357>`_).
* Fixed various warnings and issues with various compilers
(`#494 <https://github.com/fmtlib/fmt/pull/494>`_,
`#499 <https://github.com/fmtlib/fmt/pull/499>`_,
`#483 <https://github.com/fmtlib/fmt/pull/483>`_,
`#485 <https://github.com/fmtlib/fmt/pull/485>`_,
`#482 <https://github.com/fmtlib/fmt/pull/482>`_,
`#475 <https://github.com/fmtlib/fmt/pull/475>`_,
`#473 <https://github.com/fmtlib/fmt/pull/473>`_ and
`#414 <https://github.com/fmtlib/fmt/pull/414>`_).
Thanks `@chronoxor <https://github.com/chronoxor>`_,
`@zhaohuaxishi <https://github.com/zhaohuaxishi>`_,
`@pkestene (Pierre Kestener) <https://github.com/pkestene>`_,
`@dschmidt (Dominik Schmidt) <https://github.com/dschmidt>`_ and
`@0x414c (Alexey Gorishny) <https://github.com/0x414c>`_ .
* Improved CMake: targets are now namespaced
(`#511 <https://github.com/fmtlib/fmt/pull/511>`_ and
`#513 <https://github.com/fmtlib/fmt/pull/513>`_), supported header-only
``printf.h`` (`#354 <https://github.com/fmtlib/fmt/pull/354>`_), fixed issue
with minimal supported library subset
(`#418 <https://github.com/fmtlib/fmt/issues/418>`_,
`#419 <https://github.com/fmtlib/fmt/pull/419>`_ and
`#420 <https://github.com/fmtlib/fmt/pull/420>`_).
Thanks `@bjoernthiel (Bjoern Thiel) <https://github.com/bjoernthiel>`_,
`@niosHD (Mario Werner) <https://github.com/niosHD>`_,
`@LogicalKnight (Sean LK) <https://github.com/LogicalKnight>`_ and
`@alabuzhev (Alex Alabuzhev) <https://github.com/alabuzhev>`_.
* Improved documentation. Thanks to
`@pwm1234 (Phil) <https://github.com/pwm1234>`_ for
`#393 <https://github.com/fmtlib/fmt/pull/393>`_.
3.0.2 - 2017-06-14
------------------
* Added ``FMT_VERSION`` macro
(`#411 <https://github.com/fmtlib/fmt/issues/411>`_).
* Used ``FMT_NULL`` instead of literal ``0``
(`#409 <https://github.com/fmtlib/fmt/pull/409>`_).
Thanks `@alabuzhev (Alex Alabuzhev) <https://github.com/alabuzhev>`_.
* Added extern templates for ``format_float``
(`#413 <https://github.com/fmtlib/fmt/issues/413>`_).
* Fixed implicit conversion issue
(`#507 <https://github.com/fmtlib/fmt/issues/507>`_).
* Fixed signbit detection (`#423 <https://github.com/fmtlib/fmt/issues/423>`_).
* Fixed naming collision (`#425 <https://github.com/fmtlib/fmt/issues/425>`_).
* Fixed missing intrinsic for C++/CLI
(`#457 <https://github.com/fmtlib/fmt/pull/457>`_).
Thanks `@calumr (Calum Robinson) <https://github.com/calumr>`_
* Fixed Android detection (`#458 <https://github.com/fmtlib/fmt/pull/458>`_).
Thanks `@Gachapen (Magnus Bjerke Vik) <https://github.com/Gachapen>`_.
* Use lean ``windows.h`` if not in header-only mode
(`#503 <https://github.com/fmtlib/fmt/pull/503>`_).
Thanks `@Quentin01 (Quentin Buathier) <https://github.com/Quentin01>`_.
* Fixed issue with CMake exporting C++11 flag
(`#445 <https://github.com/fmtlib/fmt/pull/455>`_).
Thanks `@EricWF (Eric) <https://github.com/EricWF>`_.
* Fixed issue with nvcc and MSVC compiler bug and MinGW
(`#505 <https://github.com/fmtlib/fmt/issues/505>`_).
* Fixed DLL issues (`#469 <https://github.com/fmtlib/fmt/pull/469>`_ and
`#502 <https://github.com/fmtlib/fmt/pull/502>`_).
Thanks `@richardeakin (Richard Eakin) <https://github.com/richardeakin>`_ and
`@AndreasSchoenle (Andreas Schönle) <https://github.com/AndreasSchoenle>`_.
* Fixed test compilation under FreeBSD
(`#433 <https://github.com/fmtlib/fmt/issues/433>`_).
* Fixed various warnings (`#403 <https://github.com/fmtlib/fmt/pull/403>`_,
`#410 <https://github.com/fmtlib/fmt/pull/410>`_ and
`#510 <https://github.com/fmtlib/fmt/pull/510>`_).
Thanks `@Lecetem <https://github.com/Lectem>`_,
`@chenhayat (Chen Hayat) <https://github.com/chenhayat>`_ and
`@trozen <https://github.com/trozen>`_.
2018-05-13 15:53:16 +00:00
* Worked around a broken ``__builtin_clz`` in clang with MS codegen
(`#519 <https://github.com/fmtlib/fmt/issues/519>`_).
2018-01-21 01:39:15 +00:00
* Removed redundant include
(`#479 <https://github.com/fmtlib/fmt/issues/479>`_).
* Fixed documentation issues.
3.0.1 - 2016-11-01
------------------
2019-03-10 01:06:30 +00:00
* Fixed handling of thousands separator
2018-01-21 01:39:15 +00:00
(`#353 <https://github.com/fmtlib/fmt/issues/353>`_).
* Fixed handling of ``unsigned char`` strings
(`#373 <https://github.com/fmtlib/fmt/issues/373>`_).
* Corrected buffer growth when formatting time
(`#367 <https://github.com/fmtlib/fmt/issues/367>`_).
* Removed warnings under MSVC and clang
(`#318 <https://github.com/fmtlib/fmt/issues/318>`_,
`#250 <https://github.com/fmtlib/fmt/issues/250>`_, also merged
`#385 <https://github.com/fmtlib/fmt/pull/385>`_ and
`#361 <https://github.com/fmtlib/fmt/pull/361>`_).
Thanks `@jcelerier (Jean-Michaël Celerier) <https://github.com/jcelerier>`_
and `@nmoehrle (Nils Moehrle) <https://github.com/nmoehrle>`_.
* Fixed compilation issues under Android
(`#327 <https://github.com/fmtlib/fmt/pull/327>`_,
`#345 <https://github.com/fmtlib/fmt/issues/345>`_ and
`#381 <https://github.com/fmtlib/fmt/pull/381>`_),
FreeBSD (`#358 <https://github.com/fmtlib/fmt/pull/358>`_),
Cygwin (`#388 <https://github.com/fmtlib/fmt/issues/388>`_),
MinGW (`#355 <https://github.com/fmtlib/fmt/issues/355>`_) as well as other
issues (`#350 <https://github.com/fmtlib/fmt/issues/350>`_,
`#366 <https://github.com/fmtlib/fmt/issues/355>`_,
`#348 <https://github.com/fmtlib/fmt/pull/348>`_,
`#402 <https://github.com/fmtlib/fmt/pull/402>`_,
`#405 <https://github.com/fmtlib/fmt/pull/405>`_).
Thanks to `@dpantele (Dmitry) <https://github.com/dpantele>`_,
`@hghwng (Hugh Wang) <https://github.com/hghwng>`_,
`@arvedarved (Tilman Keskinöz) <https://github.com/arvedarved>`_,
`@LogicalKnight (Sean) <https://github.com/LogicalKnight>`_ and
`@JanHellwig (Jan Hellwig) <https://github.com/janhellwig>`_.
* Fixed some documentation issues and extended specification
(`#320 <https://github.com/fmtlib/fmt/issues/320>`_,
`#333 <https://github.com/fmtlib/fmt/pull/333>`_,
`#347 <https://github.com/fmtlib/fmt/issues/347>`_,
`#362 <https://github.com/fmtlib/fmt/pull/362>`_).
Thanks to `@smellman (Taro Matsuzawa aka. btm)
<https://github.com/smellman>`_.
2016-05-07 16:50:47 +00:00
3.0.0 - 2016-05-07
------------------
2016-05-04 15:49:29 +00:00
* The project has been renamed from C++ Format (cppformat) to fmt for
consistency with the used namespace and macro prefix
(`#307 <https://github.com/fmtlib/fmt/issues/307>`_).
Library headers are now located in the ``fmt`` directory:
.. code:: c++
#include "fmt/format.h"
2016-05-05 15:20:12 +00:00
Including ``format.h`` from the ``cppformat`` directory is deprecated
2016-05-04 15:49:29 +00:00
but works via a proxy header which will be removed in the next major version.
2016-05-07 15:59:19 +00:00
2019-05-17 22:42:00 +00:00
The documentation is now available at https://fmt.dev.
2016-05-04 15:49:29 +00:00
2016-05-07 14:50:56 +00:00
* Added support for `strftime <http://en.cppreference.com/w/cpp/chrono/c/strftime>`_-like
2019-05-17 22:42:00 +00:00
`date and time formatting <https://fmt.dev/3.0.0/api.html#date-and-time-formatting>`_
2016-05-07 14:50:56 +00:00
(`#283 <https://github.com/fmtlib/fmt/issues/283>`_):
.. code:: c++
#include "fmt/time.h"
std::time_t t = std::time(nullptr);
// Prints "The date is 2016-04-29." (with the current date)
fmt::print("The date is {:%Y-%m-%d}.", *std::localtime(&t));
2016-05-07 15:50:51 +00:00
* ``std::ostream`` support including formatting of user-defined types that provide
overloaded ``operator<<`` has been moved to ``fmt/ostream.h``:
.. code:: c++
#include "fmt/ostream.h"
class Date {
int year_, month_, day_;
public:
Date(int year, int month, int day) : year_(year), month_(month), day_(day) {}
friend std::ostream &operator<<(std::ostream &os, const Date &d) {
return os << d.year_ << '-' << d.month_ << '-' << d.day_;
}
};
std::string s = fmt::format("The date is {}", Date(2012, 12, 9));
// s == "The date is 2012-12-9"
2016-05-07 14:50:56 +00:00
* Added support for `custom argument formatters
2019-05-17 22:42:00 +00:00
<https://fmt.dev/3.0.0/api.html#argument-formatters>`_
2016-05-07 14:50:56 +00:00
(`#235 <https://github.com/fmtlib/fmt/issues/235>`_).
* Added support for locale-specific integer formatting with the ``n`` specifier
(`#305 <https://github.com/fmtlib/fmt/issues/305>`_):
.. code:: c++
std::setlocale(LC_ALL, "en_US.utf8");
fmt::print("cppformat: {:n}\n", 1234567); // prints 1,234,567
* Sign is now preserved when formatting an integer with an incorrect ``printf``
format specifier (`#265 <https://github.com/fmtlib/fmt/issues/265>`_):
.. code:: c++
fmt::printf("%lld", -42); // prints -42
Note that it would be an undefined behavior in ``std::printf``.
* Length modifiers such as ``ll`` are now optional in printf formatting
2016-05-07 14:50:56 +00:00
functions and the correct type is determined automatically
(`#255 <https://github.com/fmtlib/fmt/issues/255>`_):
.. code:: c++
fmt::printf("%d", std::numeric_limits<long long>::max());
Note that it would be an undefined behavior in ``std::printf``.
* Added initial support for custom formatters
(`#231 <https://github.com/fmtlib/fmt/issues/231>`_).
2016-05-04 15:49:29 +00:00
* Fixed detection of user-defined literal support on Intel C++ compiler
(`#311 <https://github.com/fmtlib/fmt/issues/311>`_,
`#312 <https://github.com/fmtlib/fmt/pull/312>`_).
Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_ and
`@speth (Ray Speth) <https://github.com/speth>`_.
2016-05-07 15:44:51 +00:00
* Reduced compile time
2016-05-05 15:20:12 +00:00
(`#243 <https://github.com/fmtlib/fmt/pull/243>`_,
2016-05-07 15:44:51 +00:00
`#249 <https://github.com/fmtlib/fmt/pull/249>`_,
`#317 <https://github.com/fmtlib/fmt/issues/317>`_):
.. image:: https://cloud.githubusercontent.com/assets/4831417/11614060/
b9e826d2-9c36-11e5-8666-d4131bf503ef.png
.. image:: https://cloud.githubusercontent.com/assets/4831417/11614080/
6ac903cc-9c37-11e5-8165-26df6efae364.png
2016-05-05 15:20:12 +00:00
Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_.
2016-05-04 15:49:29 +00:00
* Compile test fixes (`#313 <https://github.com/fmtlib/fmt/pull/313>`_).
Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_.
2016-05-07 14:50:56 +00:00
* Documentation fixes (`#239 <https://github.com/fmtlib/fmt/pull/239>`_,
`#248 <https://github.com/fmtlib/fmt/issues/248>`_,
`#252 <https://github.com/fmtlib/fmt/issues/252>`_,
`#258 <https://github.com/fmtlib/fmt/pull/258>`_,
`#260 <https://github.com/fmtlib/fmt/issues/260>`_,
`#301 <https://github.com/fmtlib/fmt/issues/301>`_,
2016-05-05 15:20:12 +00:00
`#309 <https://github.com/fmtlib/fmt/pull/309>`_).
Thanks to `@ReadmeCritic <https://github.com/ReadmeCritic>`_
`@Gachapen (Magnus Bjerke Vik) <https://github.com/Gachapen>`_ and
`@jwilk (Jakub Wilk) <https://github.com/jwilk>`_.
2016-05-04 15:49:29 +00:00
2016-05-08 14:27:41 +00:00
* Fixed compiler and sanitizer warnings
(`#244 <https://github.com/fmtlib/fmt/issues/244>`_,
2016-05-07 14:50:56 +00:00
`#256 <https://github.com/fmtlib/fmt/pull/256>`_,
2016-05-05 15:20:12 +00:00
`#259 <https://github.com/fmtlib/fmt/pull/259>`_,
2016-05-07 14:50:56 +00:00
`#263 <https://github.com/fmtlib/fmt/issues/263>`_,
`#274 <https://github.com/fmtlib/fmt/issues/274>`_,
2016-05-04 15:49:29 +00:00
`#277 <https://github.com/fmtlib/fmt/pull/277>`_,
2016-05-07 14:50:56 +00:00
`#286 <https://github.com/fmtlib/fmt/pull/286>`_,
`#291 <https://github.com/fmtlib/fmt/issues/291>`_,
`#296 <https://github.com/fmtlib/fmt/issues/296>`_,
`#308 <https://github.com/fmtlib/fmt/issues/308>`_)
2016-05-04 15:49:29 +00:00
Thanks to `@mwinterb <https://github.com/mwinterb>`_,
`@pweiskircher (Patrik Weiskircher) <https://github.com/pweiskircher>`_,
`@Naios <https://github.com/Naios>`_.
* Improved compatibility with Windows Store apps
(`#280 <https://github.com/fmtlib/fmt/issues/280>`_,
`#285 <https://github.com/fmtlib/fmt/pull/285>`_)
Thanks to `@mwinterb <https://github.com/mwinterb>`_.
* Added tests of compatibility with older C++ standards
(`#273 <https://github.com/fmtlib/fmt/pull/273>`_).
Thanks to `@niosHD <https://github.com/niosHD>`_.
* Fixed Android build (`#271 <https://github.com/fmtlib/fmt/pull/271>`_).
Thanks to `@newnon <https://github.com/newnon>`_.
* Changed ``ArgMap`` to be backed by a vector instead of a map.
2016-05-07 14:50:56 +00:00
(`#261 <https://github.com/fmtlib/fmt/issues/261>`_,
`#262 <https://github.com/fmtlib/fmt/pull/262>`_).
2016-05-04 15:49:29 +00:00
Thanks to `@mwinterb <https://github.com/mwinterb>`_.
2016-05-05 15:20:12 +00:00
* Added ``fprintf`` overload that writes to a ``std::ostream``
(`#251 <https://github.com/fmtlib/fmt/pull/251>`_).
Thanks to `nickhutchinson (Nicholas Hutchinson) <https://github.com/nickhutchinson>`_.
* Export symbols when building a Windows DLL
(`#245 <https://github.com/fmtlib/fmt/pull/245>`_).
Thanks to `macdems (Maciek Dems) <https://github.com/macdems>`_.
2016-05-07 14:50:56 +00:00
* Fixed compilation on Cygwin (`#304 <https://github.com/fmtlib/fmt/issues/304>`_).
* Implemented a workaround for a bug in Apple LLVM version 4.2 of clang
(`#276 <https://github.com/fmtlib/fmt/issues/276>`_).
* Implemented a workaround for Google Test bug
`#705 <https://github.com/google/googletest/issues/705>`_ on gcc 6
(`#268 <https://github.com/fmtlib/fmt/issues/268>`_).
Thanks to `octoploid <https://github.com/octoploid>`_.
2016-05-07 15:59:19 +00:00
* Removed Biicode support because the latter has been discontinued.
2016-04-11 19:17:15 +00:00
2.1.1 - 2016-04-11
------------------
2016-04-11 19:13:36 +00:00
* The install location for generated CMake files is now configurable via
the ``FMT_CMAKE_DIR`` CMake variable
2016-04-28 13:45:50 +00:00
(`#299 <https://github.com/fmtlib/fmt/pull/299>`_).
2016-04-11 19:13:36 +00:00
Thanks to `@niosHD <https://github.com/niosHD>`_.
2016-04-28 13:45:50 +00:00
* Documentation fixes (`#252 <https://github.com/fmtlib/fmt/issues/252>`_).
2016-04-11 19:13:36 +00:00
2016-03-21 14:58:24 +00:00
2.1.0 - 2016-03-21
------------------
2016-03-21 14:57:06 +00:00
* Project layout and build system improvements
2016-04-28 13:45:50 +00:00
(`#267 <https://github.com/fmtlib/fmt/pull/267>`_):
2016-03-21 14:57:06 +00:00
* The code have been moved to the ``cppformat`` directory.
Including ``format.h`` from the top-level directory is deprecated
but works via a proxy header which will be removed in the next
major version.
* C++ Format CMake targets now have proper interface definitions.
* Installed version of the library now supports the header-only
configuration.
* Targets ``doc``, ``install``, and ``test`` are now disabled if C++ Format
is included as a CMake subproject. They can be enabled by setting
``FMT_DOC``, ``FMT_INSTALL``, and ``FMT_TEST`` in the parent project.
Thanks to `@niosHD <https://github.com/niosHD>`_.
2016-03-17 14:28:21 +00:00
2.0.1 - 2016-03-13
------------------
* Improved CMake find and package support
2016-04-28 13:45:50 +00:00
(`#264 <https://github.com/fmtlib/fmt/issues/264>`_).
2016-03-17 14:28:21 +00:00
Thanks to `@niosHD <https://github.com/niosHD>`_.
* Fix compile error with Android NDK and mingw32
2016-04-28 13:45:50 +00:00
(`#241 <https://github.com/fmtlib/fmt/issues/241>`_).
2016-03-17 14:28:21 +00:00
Thanks to `@Gachapen (Magnus Bjerke Vik) <https://github.com/Gachapen>`_.
* Documentation fixes
2016-04-28 13:45:50 +00:00
(`#248 <https://github.com/fmtlib/fmt/issues/248>`_,
`#260 <https://github.com/fmtlib/fmt/issues/260>`_).
2016-03-17 14:28:21 +00:00
2015-12-01 15:33:30 +00:00
2.0.0 - 2015-12-01
------------------
2015-10-23 13:52:12 +00:00
2015-11-30 16:10:49 +00:00
General
~~~~~~~
2015-10-29 14:28:47 +00:00
2015-11-30 16:10:49 +00:00
* [Breaking] Named arguments
2016-04-28 13:45:50 +00:00
(`#169 <https://github.com/fmtlib/fmt/pull/169>`_,
`#173 <https://github.com/fmtlib/fmt/pull/173>`_,
`#174 <https://github.com/fmtlib/fmt/pull/174>`_):
2015-10-30 14:43:15 +00:00
2015-11-30 16:10:49 +00:00
.. 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
2016-04-28 13:45:50 +00:00
(`#204 <https://github.com/fmtlib/fmt/pull/204>`_,
`#206 <https://github.com/fmtlib/fmt/pull/206>`_,
`#207 <https://github.com/fmtlib/fmt/pull/207>`_):
2015-10-29 14:24:39 +00:00
.. code:: c++
2015-11-30 16:10:49 +00:00
using namespace fmt::literals;
fmt::print("The answer is {answer}.", "answer"_a=42);
2015-10-29 14:24:39 +00:00
2015-11-30 16:10:49 +00:00
Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_.
2015-10-29 14:24:39 +00:00
2015-11-30 16:10:49 +00:00
* [Breaking] Formatting of more than 16 arguments is now supported when using
variadic templates
2016-04-28 13:45:50 +00:00
(`#141 <https://github.com/fmtlib/fmt/issues/141>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@Shauren <https://github.com/Shauren>`_.
* Runtime width specification
2016-04-28 13:45:50 +00:00
(`#168 <https://github.com/fmtlib/fmt/pull/168>`_):
2015-11-30 16:10:49 +00:00
.. 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
2016-04-28 13:45:50 +00:00
(`#232 <https://github.com/fmtlib/fmt/issues/232>`_).
2015-11-30 16:10:49 +00:00
* [Breaking] Changed default ``bool`` format to textual, "true" or "false"
2016-04-28 13:45:50 +00:00
(`#170 <https://github.com/fmtlib/fmt/issues/170>`_):
2015-11-30 16:10:49 +00:00
.. 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"
2016-04-28 13:45:50 +00:00
(`#223 <https://github.com/fmtlib/fmt/pull/223>`_):
2015-11-30 16:10:49 +00:00
.. code:: c++
fmt::printf("%s", true); // prints "true"
Thanks to `@LarsGullik <https://github.com/LarsGullik>`_.
2015-11-30 16:17:47 +00:00
* [Breaking] ``signed char`` and ``unsigned char`` are now formatted as integers by default
2016-04-28 13:45:50 +00:00
(`#217 <https://github.com/fmtlib/fmt/pull/217>`_).
2015-11-30 16:10:49 +00:00
* [Breaking] Pointers to C strings can now be formatted with the ``p`` specifier
2016-04-28 13:45:50 +00:00
(`#223 <https://github.com/fmtlib/fmt/pull/223>`_):
2015-11-30 16:10:49 +00:00
.. 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
2016-04-28 13:45:50 +00:00
(`#226 <https://github.com/fmtlib/fmt/pull/226>`_).
2015-11-30 16:10:49 +00:00
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<<``)
2016-04-28 13:45:50 +00:00
(`#201 <https://github.com/fmtlib/fmt/issues/201>`_):
2015-11-30 16:10:49 +00:00
.. code:: c++
fmt::printf("The date is %s", Date(2012, 12, 9));
2015-10-29 14:16:59 +00:00
2015-10-29 15:26:03 +00:00
* [Breaking] The ``Buffer`` template is now part of the public API and can be used
2015-10-29 14:14:21 +00:00
to implement custom memory buffers
2016-04-28 13:45:50 +00:00
(`#140 <https://github.com/fmtlib/fmt/issues/140>`_).
2015-10-29 14:14:21 +00:00
Thanks to `@polyvertex (Jean-Charles Lefebvre) <https://github.com/polyvertex>`_.
2015-11-30 16:10:49 +00:00
* [Breaking] Improved compatibility between ``BasicStringRef`` and
`std::experimental::basic_string_view
<http://en.cppreference.com/w/cpp/experimental/basic_string_view>`_
2016-04-28 13:45:50 +00:00
(`#100 <https://github.com/fmtlib/fmt/issues/100>`_,
`#159 <https://github.com/fmtlib/fmt/issues/159>`_,
`#183 <https://github.com/fmtlib/fmt/issues/183>`_):
2015-10-30 14:35:18 +00:00
2015-11-30 16:10:49 +00:00
- Comparison operators now compare string content, not pointers
- ``BasicStringRef::c_str`` replaced by ``BasicStringRef::data``
- ``BasicStringRef`` is no longer assumed to be null-terminated
2015-10-30 14:35:18 +00:00
2015-11-30 16:17:47 +00:00
References to null-terminated strings are now represented by a new class,
``BasicCStringRef``.
2015-11-30 16:10:49 +00:00
* Dependency on pthreads introduced by Google Test is now optional
2016-04-28 13:45:50 +00:00
(`#185 <https://github.com/fmtlib/fmt/issues/185>`_).
2015-10-29 13:44:51 +00:00
2015-11-30 16:10:49 +00:00
* New CMake options ``FMT_DOC``, ``FMT_INSTALL`` and ``FMT_TEST`` to control
generation of ``doc``, ``install`` and ``test`` targets respectively, on by default
2016-04-28 13:45:50 +00:00
(`#197 <https://github.com/fmtlib/fmt/issues/197>`_,
`#198 <https://github.com/fmtlib/fmt/issues/198>`_,
`#200 <https://github.com/fmtlib/fmt/issues/200>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@maddinat0r (Alex Martin) <https://github.com/maddinat0r>`_.
* ``noexcept`` is now used when compiling with MSVC2015
2016-04-28 13:45:50 +00:00
(`#215 <https://github.com/fmtlib/fmt/pull/215>`_).
2015-11-30 16:10:49 +00:00
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``
2016-04-28 13:45:50 +00:00
(`#171 <https://github.com/fmtlib/fmt/issues/171>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@alfps (Alf P. Steinbach) <https://github.com/alfps>`_.
2015-10-29 13:28:51 +00:00
2015-10-29 13:24:15 +00:00
* [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
2016-04-28 13:45:50 +00:00
(`#152 <https://github.com/fmtlib/fmt/issues/152>`_,
`#153 <https://github.com/fmtlib/fmt/pull/153>`_,
`#154 <https://github.com/fmtlib/fmt/pull/154>`_).
2015-10-29 13:24:15 +00:00
Thanks to `@DevO2012 <https://github.com/DevO2012>`_.
2015-11-30 16:10:49 +00:00
* Improved support for custom character types
2016-04-28 13:45:50 +00:00
(`#171 <https://github.com/fmtlib/fmt/issues/171>`_).
2015-11-30 16:10:49 +00:00
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``
2016-04-28 13:45:50 +00:00
(`#205 <https://github.com/fmtlib/fmt/issues/205>`_,
`#208 <https://github.com/fmtlib/fmt/pull/208>`_).
2015-11-30 16:10:49 +00:00
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
2016-04-28 13:45:50 +00:00
(`#92 <https://github.com/fmtlib/fmt/issues/92>`_,
`#230 <https://github.com/fmtlib/fmt/pull/230>`_).
2015-11-30 16:10:49 +00:00
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 than ``karma::generate``
on Karma's benchmark
2016-04-28 13:45:50 +00:00
(`#186 <https://github.com/fmtlib/fmt/issues/186>`_).
2015-11-30 16:10:49 +00:00
* [Breaking] Reduced `compiled code size
2016-04-28 13:45:50 +00:00
<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>`_).
2015-11-30 16:10:49 +00:00
Distribution
~~~~~~~~~~~~
* [Breaking] Headers are now installed in
``${CMAKE_INSTALL_PREFIX}/include/cppformat``
2016-04-28 13:45:50 +00:00
(`#178 <https://github.com/fmtlib/fmt/issues/178>`_).
2015-11-30 16:10:49 +00:00
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
2016-04-28 13:45:50 +00:00
(`#178 <https://github.com/fmtlib/fmt/issues/178>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_.
2015-10-28 15:31:12 +00:00
* 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
2016-04-28 13:45:50 +00:00
(`#155 <https://github.com/fmtlib/fmt/issues/155>`_)::
2015-10-28 15:31:12 +00:00
$ sudo apt-get install libcppformat1-dev
2015-10-28 14:49:31 +00:00
Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_.
2015-11-30 16:22:03 +00:00
* `Packages for Fedora and RHEL <https://admin.fedoraproject.org/pkgdb/package/cppformat/>`_
are now available. Thanks to Dave Johansen.
2015-10-28 15:31:12 +00:00
* C++ Format can now be installed via `Homebrew <http://brew.sh/>`_ on OS X
2016-04-28 13:45:50 +00:00
(`#157 <https://github.com/fmtlib/fmt/issues/157>`_)::
2015-10-28 15:31:12 +00:00
$ brew install cppformat
Thanks to `@ortho <https://github.com/ortho>`_, Anatoliy Bulukin.
2015-11-30 16:10:49 +00:00
Documentation
~~~~~~~~~~~~~
2015-10-28 04:55:57 +00:00
2015-11-30 16:10:49 +00:00
* Migrated from ReadTheDocs to GitHub Pages for better responsiveness
and reliability
2016-04-28 13:45:50 +00:00
(`#128 <https://github.com/fmtlib/fmt/issues/128>`_).
2015-11-30 16:10:49 +00:00
New documentation address is http://cppformat.github.io/.
2015-10-28 04:55:57 +00:00
2015-11-30 16:17:47 +00:00
2015-11-30 16:10:49 +00:00
* Added `Building the documentation
2019-05-17 22:42:00 +00:00
<https://fmt.dev/2.0.0/usage.html#building-the-documentation>`_
2015-11-30 16:10:49 +00:00
section to the documentation.
2015-10-28 04:55:57 +00:00
2015-11-30 16:10:49 +00:00
* Documentation build script is now compatible with Python 3 and newer pip versions.
2016-04-28 13:45:50 +00:00
(`#189 <https://github.com/fmtlib/fmt/pull/189>`_,
`#209 <https://github.com/fmtlib/fmt/issues/209>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@JodiTheTigger <https://github.com/JodiTheTigger>`_ and
`@xentec <https://github.com/xentec>`_.
2015-10-29 14:41:26 +00:00
* Documentation fixes and improvements
2016-04-28 13:45:50 +00:00
(`#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>`_).
2015-10-30 13:56:07 +00:00
Thanks to `@syohex (Syohei YOSHIDA) <https://github.com/syohex>`_ and
bug reporters.
2015-10-28 14:08:45 +00:00
2015-11-30 16:10:49 +00:00
* Fixed out-of-tree documentation build
2016-04-28 13:45:50 +00:00
(`#177 <https://github.com/fmtlib/fmt/issues/177>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_.
2015-10-30 13:56:07 +00:00
2015-11-30 16:10:49 +00:00
Fixes
~~~~~
2015-10-30 13:56:07 +00:00
2015-11-30 16:10:49 +00:00
* Fixed ``initializer_list`` detection
2016-04-28 13:45:50 +00:00
(`#136 <https://github.com/fmtlib/fmt/issues/136>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@Gachapen (Magnus Bjerke Vik) <https://github.com/Gachapen>`_.
2015-10-30 13:56:07 +00:00
2015-11-30 16:10:49 +00:00
* [Breaking] Fixed formatting of enums with numeric format specifiers in
``fmt::(s)printf``
2016-04-28 13:45:50 +00:00
(`#131 <https://github.com/fmtlib/fmt/issues/131>`_,
`#139 <https://github.com/fmtlib/fmt/issues/139>`_):
2015-10-30 13:45:56 +00:00
.. code:: c++
2015-11-30 16:10:49 +00:00
enum { ANSWER = 42 };
fmt::printf("%d", ANSWER);
2015-10-27 14:03:42 +00:00
2015-11-30 16:10:49 +00:00
Thanks to `@Naios <https://github.com/Naios>`_.
2015-10-27 14:03:42 +00:00
2015-11-30 16:10:49 +00:00
* Improved compatibility with old versions of MinGW
2016-04-28 13:45:50 +00:00
(`#129 <https://github.com/fmtlib/fmt/issues/129>`_,
`#130 <https://github.com/fmtlib/fmt/pull/130>`_,
`#132 <https://github.com/fmtlib/fmt/issues/132>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@cstamford (Christopher Stamford) <https://github.com/cstamford>`_.
2015-10-28 15:00:25 +00:00
2015-11-30 16:10:49 +00:00
* Fixed a compile error on MSVC with disabled exceptions
2016-04-28 13:45:50 +00:00
(`#144 <https://github.com/fmtlib/fmt/issues/144>`_).
2015-10-23 15:15:45 +00:00
2015-11-30 16:10:49 +00:00
* Added a workaround for broken implementation of variadic templates in MSVC2012
2016-04-28 13:45:50 +00:00
(`#148 <https://github.com/fmtlib/fmt/issues/148>`_).
2015-10-23 15:15:45 +00:00
2015-11-30 16:10:49 +00:00
* Placed the anonymous namespace within ``fmt`` namespace for the header-only
configuration
2016-04-28 13:45:50 +00:00
(`#171 <https://github.com/fmtlib/fmt/issues/171>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@alfps (Alf P. Steinbach) <https://github.com/alfps>`_.
2015-10-23 15:04:00 +00:00
2015-11-30 16:10:49 +00:00
* Fixed issues reported by Coverity Scan
2016-04-28 13:45:50 +00:00
(`#187 <https://github.com/fmtlib/fmt/issues/187>`_,
`#192 <https://github.com/fmtlib/fmt/issues/192>`_).
2015-10-23 14:23:54 +00:00
2015-10-23 15:15:45 +00:00
* Implemented a workaround for a name lookup bug in MSVC2010
2016-04-28 13:45:50 +00:00
(`#188 <https://github.com/fmtlib/fmt/issues/188>`_).
2015-10-23 14:20:54 +00:00
2015-10-30 13:45:56 +00:00
* Fixed compiler warnings
2016-04-28 13:45:50 +00:00
(`#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>`_,
2016-05-07 14:50:56 +00:00
`#236 <https://github.com/fmtlib/fmt/pull/236>`_,
`#281 <https://github.com/fmtlib/fmt/issues/281>`_,
`#289 <https://github.com/fmtlib/fmt/issues/289>`_).
2015-11-30 15:22:51 +00:00
Thanks to `@seanmiddleditch (Sean Middleditch) <https://github.com/seanmiddleditch>`_,
`@dixlorenz (Dix Lorenz) <https://github.com/dixlorenz>`_,
2015-12-01 15:20:33 +00:00
`@CarterLi (李通洲) <https://github.com/CarterLi>`_,
2015-11-30 15:22:51 +00:00
`@Naios <https://github.com/Naios>`_,
2015-10-29 13:28:51 +00:00
`@fmatthew5876 (Matthew Fioravante) <https://github.com/fmatthew5876>`_,
2015-10-28 15:13:36 +00:00
`@LevskiWeng (Levski Weng) <https://github.com/LevskiWeng>`_,
2015-10-28 14:08:45 +00:00
`@rpopescu <https://github.com/rpopescu>`_,
2015-10-30 13:24:36 +00:00
`@gabime (Gabi Melman) <https://github.com/gabime>`_,
2015-11-30 16:10:49 +00:00
`@cubicool (Jeremy Moles) <https://github.com/cubicool>`_,
`@jkflying (Julian Kent) <https://github.com/jkflying>`_,
2015-12-01 15:20:33 +00:00
`@LogicalKnight (Sean L) <https://github.com/LogicalKnight>`_,
`@inguin (Ingo van Lil) <https://github.com/inguin>`_ and
`@Jopie64 (Johan) <https://github.com/Jopie64>`_.
2015-10-23 14:09:26 +00:00
2015-10-30 14:35:18 +00:00
* Fixed portability issues (mostly causing test failures) on ARM, ppc64, ppc64le,
2018-07-04 23:00:06 +00:00
s390x and SunOS 5.11 i386
(`#138 <https://github.com/fmtlib/fmt/issues/138>`_,
2016-04-28 13:45:50 +00:00
`#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>`_,
2015-10-23 14:10:24 +00:00
`Red Hat Bugzilla Bug 1260297 <https://bugzilla.redhat.com/show_bug.cgi?id=1260297>`_).
2015-10-30 14:35:18 +00:00
Thanks to `@Naios <https://github.com/Naios>`_,
`@jackyf (Eugene V. Lyubimkin) <https://github.com/jackyf>`_ and Dave Johansen.
2015-10-23 14:00:45 +00:00
2015-10-23 13:52:12 +00:00
* Fixed a name conflict with macro ``free`` defined in
``crtdbg.h`` when ``_CRTDBG_MAP_ALLOC`` is set
2016-04-28 13:45:50 +00:00
(`#211 <https://github.com/fmtlib/fmt/issues/211>`_).
2015-10-23 13:52:12 +00:00
2015-10-29 15:24:31 +00:00
* Fixed shared library build on OS X
2016-04-28 13:45:50 +00:00
(`#212 <https://github.com/fmtlib/fmt/pull/212>`_).
2015-10-29 15:24:31 +00:00
Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_.
2015-10-29 13:44:51 +00:00
* Fixed an overload conflict on MSVC when ``/Zc:wchar_t-`` option is specified
2016-04-28 13:45:50 +00:00
(`#214 <https://github.com/fmtlib/fmt/pull/214>`_).
2015-10-25 15:58:05 +00:00
Thanks to `@slavanap (Vyacheslav Napadovsky) <https://github.com/slavanap>`_.
2015-12-01 15:20:33 +00:00
* Improved compatibility with MSVC 2008
2016-04-28 13:45:50 +00:00
(`#236 <https://github.com/fmtlib/fmt/pull/236>`_).
2015-12-01 15:20:33 +00:00
Thanks to `@Jopie64 (Johan) <https://github.com/Jopie64>`_.
2015-11-30 15:22:51 +00:00
* Improved compatibility with bcc32
2016-04-28 13:45:50 +00:00
(`#227 <https://github.com/fmtlib/fmt/issues/227>`_).
2015-11-30 15:22:51 +00:00
2015-11-30 16:10:49 +00:00
* Fixed ``static_assert`` detection on Clang
2016-04-28 13:45:50 +00:00
(`#228 <https://github.com/fmtlib/fmt/pull/228>`_).
2015-11-30 16:10:49 +00:00
Thanks to `@dean0x7d (Dean Moldovan) <https://github.com/dean0x7d>`_.
2015-11-30 15:22:51 +00:00
2015-03-06 16:33:25 +00:00
1.1.0 - 2015-03-06
------------------
2015-03-06 15:18:44 +00:00
2015-03-06 16:14:19 +00:00
* Added ``BasicArrayWriter``, a class template that provides operations for
formatting and writing data into a fixed-size array
2016-04-28 13:45:50 +00:00
(`#105 <https://github.com/fmtlib/fmt/issues/105>`_ and
`#122 <https://github.com/fmtlib/fmt/issues/122>`_):
2015-03-06 16:14:19 +00:00
.. code:: c++
char buffer[100];
fmt::ArrayWriter w(buffer);
w.write("The answer is {}", 42);
2015-03-06 15:32:28 +00:00
* Added `0 A.D. <http://play0ad.com/>`_ and `PenUltima Online (POL)
<http://www.polserver.com/>`_ to the list of notable projects using C++ Format.
2015-03-06 15:18:44 +00:00
2015-03-06 16:03:11 +00:00
* C++ Format now uses MSVC intrinsics for better formatting performance
2016-04-28 13:45:50 +00:00
(`#115 <https://github.com/fmtlib/fmt/pull/115>`_,
`#116 <https://github.com/fmtlib/fmt/pull/116>`_,
`#118 <https://github.com/fmtlib/fmt/pull/118>`_ and
`#121 <https://github.com/fmtlib/fmt/pull/121>`_).
2015-03-06 15:52:06 +00:00
Previously these optimizations where only used on GCC and Clang.
2015-03-06 16:03:11 +00:00
Thanks to `@CarterLi <https://github.com/CarterLi>`_ and
`@objectx <https://github.com/objectx>`_.
2016-04-28 13:45:50 +00:00
* CMake install target (`#119 <https://github.com/fmtlib/fmt/pull/119>`_).
2015-03-06 16:03:11 +00:00
Thanks to `@TrentHouliston <https://github.com/TrentHouliston>`_.
You can now install C++ Format with ``make install`` command.
2015-03-06 15:52:06 +00:00
2015-03-06 15:18:44 +00:00
* Improved `Biicode <http://www.biicode.com/>`_ support
2016-04-28 13:45:50 +00:00
(`#98 <https://github.com/fmtlib/fmt/pull/98>`_ and
`#104 <https://github.com/fmtlib/fmt/pull/104>`_). Thanks to
2015-03-06 15:18:44 +00:00
`@MariadeAnton <https://github.com/MariadeAnton>`_ and
`@franramirez688 <https://github.com/franramirez688>`_.
2016-05-01 10:29:21 +00:00
* Improved support for building with `Android NDK
2015-03-06 15:32:28 +00:00
<https://developer.android.com/tools/sdk/ndk/index.html>`_
2016-04-28 13:45:50 +00:00
(`#107 <https://github.com/fmtlib/fmt/pull/107>`_).
2015-03-06 15:32:28 +00:00
Thanks to `@newnon <https://github.com/newnon>`_.
2016-04-28 13:45:50 +00:00
The `android-ndk-example <https://github.com/fmtlib/android-ndk-example>`_
2015-03-06 15:32:28 +00:00
repository provides and example of using C++ Format with Android NDK:
2016-04-28 13:45:50 +00:00
.. image:: https://raw.githubusercontent.com/fmtlib/android-ndk-example/
2015-03-06 15:32:28 +00:00
master/screenshot.png
* Improved documentation of ``SystemError`` and ``WindowsError``
2016-04-28 13:45:50 +00:00
(`#54 <https://github.com/fmtlib/fmt/issues/54>`_).
2015-03-06 15:18:44 +00:00
2015-03-06 15:52:06 +00:00
* Various code improvements
2016-04-28 13:45:50 +00:00
(`#110 <https://github.com/fmtlib/fmt/pull/110>`_,
`#111 <https://github.com/fmtlib/fmt/pull/111>`_
`#112 <https://github.com/fmtlib/fmt/pull/112>`_).
2015-03-06 15:52:06 +00:00
Thanks to `@CarterLi <https://github.com/CarterLi>`_.
2015-03-06 16:03:11 +00:00
* Improved compile-time errors when formatting wide into narrow strings
2016-04-28 13:45:50 +00:00
(`#117 <https://github.com/fmtlib/fmt/issues/117>`_).
2015-03-06 16:03:11 +00:00
2015-03-06 15:52:06 +00:00
* Fixed ``BasicWriter::write`` without formatting arguments when C++11 support
2016-04-28 13:45:50 +00:00
is disabled (`#109 <https://github.com/fmtlib/fmt/issues/109>`_).
2015-03-06 15:52:06 +00:00
2015-03-06 16:14:19 +00:00
* Fixed header-only build on OS X with GCC 4.9
2016-04-28 13:45:50 +00:00
(`#124 <https://github.com/fmtlib/fmt/issues/124>`_).
2015-03-06 16:14:19 +00:00
2016-04-28 13:45:50 +00:00
* Fixed packaging issues (`#94 <https://github.com/fmtlib/fmt/issues/94>`_).
2015-03-06 15:18:44 +00:00
2016-04-28 13:45:50 +00:00
* Added `changelog <https://github.com/fmtlib/fmt/blob/master/ChangeLog.rst>`_
(`#103 <https://github.com/fmtlib/fmt/issues/103>`_).
2015-03-06 16:14:19 +00:00
2015-03-05 16:04:27 +00:00
1.0.0 - 2015-02-05
------------------
* Add support for a header-only configuration when ``FMT_HEADER_ONLY`` is
defined before including ``format.h``:
.. code:: c++
#define FMT_HEADER_ONLY
#include "format.h"
* Compute string length in the constructor of ``BasicStringRef``
instead of the ``size`` method
2016-04-28 13:45:50 +00:00
(`#79 <https://github.com/fmtlib/fmt/issues/79>`_).
2015-03-05 16:04:27 +00:00
This eliminates size computation for string literals on reasonable optimizing
compilers.
* Fix formatting of types with overloaded ``operator <<`` for ``std::wostream``
2016-04-28 13:45:50 +00:00
(`#86 <https://github.com/fmtlib/fmt/issues/86>`_):
2015-03-05 16:04:27 +00:00
.. code:: c++
fmt::format(L"The date is {0}", Date(2012, 12, 9));
* Fix linkage of tests on Arch Linux
2016-04-28 13:45:50 +00:00
(`#89 <https://github.com/fmtlib/fmt/issues/89>`_).
2015-03-05 16:04:27 +00:00
* Allow precision specifier for non-float arguments
2016-04-28 13:45:50 +00:00
(`#90 <https://github.com/fmtlib/fmt/issues/90>`_):
2015-03-05 16:04:27 +00:00
.. code:: c++
fmt::print("{:.3}\n", "Carpet"); // prints "Car"
* Fix build on Android NDK
2016-04-28 13:45:50 +00:00
(`#93 <https://github.com/fmtlib/fmt/issues/93>`_)
2015-03-05 16:04:27 +00:00
* Improvements to documentation build procedure.
* Remove ``FMT_SHARED`` CMake variable in favor of standard `BUILD_SHARED_LIBS
<http://www.cmake.org/cmake/help/v3.0/variable/BUILD_SHARED_LIBS.html>`_.
* Fix error handling in ``fmt::fprintf``.
* Fix a number of warnings.
2015-03-05 15:26:44 +00:00
0.12.0 - 2014-10-25
-------------------
* [Breaking] Improved separation between formatting and buffer management.
``Writer`` is now a base class that cannot be instantiated directly.
The new ``MemoryWriter`` class implements the default buffer management
with small allocations done on stack. So ``fmt::Writer`` should be replaced
with ``fmt::MemoryWriter`` in variable declarations.
Old code:
.. code:: c++
fmt::Writer w;
New code:
.. code:: c++
fmt::MemoryWriter w;
If you pass ``fmt::Writer`` by reference, you can continue to do so:
.. code:: c++
void f(fmt::Writer &w);
This doesn't affect the formatting API.
* Support for custom memory allocators
2016-04-28 13:45:50 +00:00
(`#69 <https://github.com/fmtlib/fmt/issues/69>`_)
2015-03-05 15:26:44 +00:00
* Formatting functions now accept `signed char` and `unsigned char` strings as
2016-04-28 13:45:50 +00:00
arguments (`#73 <https://github.com/fmtlib/fmt/issues/73>`_):
2015-03-05 15:26:44 +00:00
.. code:: c++
auto s = format("GLSL version: {}", glGetString(GL_VERSION));
* Reduced code bloat. According to the new `benchmark results
2016-04-28 13:45:50 +00:00
<https://github.com/fmtlib/fmt#compile-time-and-code-bloat>`_,
2015-03-05 15:26:44 +00:00
cppformat is close to ``printf`` and by the order of magnitude better than
Boost Format in terms of compiled code size.
2015-03-05 15:31:27 +00:00
* Improved appearance of the documentation on mobile by using the `Sphinx
Bootstrap theme <http://ryan-roemer.github.io/sphinx-bootstrap-theme/>`_:
2015-03-05 15:26:44 +00:00
2015-03-05 16:15:26 +00:00
.. |old| image:: https://cloud.githubusercontent.com/assets/576385/4792130/
cd256436-5de3-11e4-9a62-c077d0c2b003.png
2015-03-05 15:29:54 +00:00
2015-03-05 16:15:26 +00:00
.. |new| image:: https://cloud.githubusercontent.com/assets/576385/4792131/
cd29896c-5de3-11e4-8f59-cac952942bf0.png
2015-03-05 15:29:54 +00:00
+-------+-------+
| Old | New |
+-------+-------+
| |old| | |new| |
+-------+-------+
2015-03-05 15:26:44 +00:00
2015-03-05 02:49:23 +00:00
0.11.0 - 2014-08-21
-------------------
* Safe printf implementation with a POSIX extension for positional arguments:
.. code:: c++
fmt::printf("Elapsed time: %.2f seconds", 1.23);
fmt::printf("%1$s, %3$d %2$s", weekday, month, day);
2015-03-05 03:02:59 +00:00
* Arguments of ``char`` type can now be formatted as integers
2016-04-28 13:45:50 +00:00
(Issue `#55 <https://github.com/fmtlib/fmt/issues/55>`_):
2015-03-05 02:49:23 +00:00
.. code:: c++
fmt::format("0x{0:02X}", 'a');
* Deprecated parts of the API removed.
* The library is now built and tested on MinGW with Appveyor in addition to
existing test platforms Linux/GCC, OS X/Clang, Windows/MSVC.
2015-03-05 02:30:00 +00:00
0.10.0 - 2014-07-01
-------------------
**Improved API**
* All formatting methods are now implemented as variadic functions instead
of using ``operator<<`` for feeding arbitrary arguments into a temporary
formatter object. This works both with C++11 where variadic templates are
used and with older standards where variadic functions are emulated by
providing lightweight wrapper functions defined with the ``FMT_VARIADIC``
macro. You can use this macro for defining your own portable variadic
functions:
.. code:: c++
void report_error(const char *format, const fmt::ArgList &args) {
fmt::print("Error: {}");
fmt::print(format, args);
}
FMT_VARIADIC(void, report_error, const char *)
report_error("file not found: {}", path);
Apart from a more natural syntax, this also improves performance as there
is no need to construct temporary formatter objects and control arguments'
2016-05-01 10:29:21 +00:00
lifetimes. Because the wrapper functions are very lightweight, this doesn't
2015-03-05 02:30:00 +00:00
cause code bloat even in pre-C++11 mode.
* Simplified common case of formatting an ``std::string``. Now it requires a
single function call:
.. code:: c++
std::string s = format("The answer is {}.", 42);
Previously it required 2 function calls:
.. code:: c++
std::string s = str(Format("The answer is {}.") << 42);
Instead of unsafe ``c_str`` function, ``fmt::Writer`` should be used directly
to bypass creation of ``std::string``:
.. code:: c++
fmt::Writer w;
w.write("The answer is {}.", 42);
w.c_str(); // returns a C string
This doesn't do dynamic memory allocation for small strings and is less error
prone as the lifetime of the string is the same as for ``std::string::c_str``
which is well understood (hopefully).
* Improved consistency in naming functions that are a part of the public API.
Now all public functions are lowercase following the standard library
conventions. Previously it was a combination of lowercase and
2015-03-05 03:02:59 +00:00
CapitalizedWords.
2016-04-28 13:45:50 +00:00
Issue `#50 <https://github.com/fmtlib/fmt/issues/50>`_.
2015-03-05 02:30:00 +00:00
* Old functions are marked as deprecated and will be removed in the next
release.
**Other Changes**
* Experimental support for printf format specifications (work in progress):
.. code:: c++
fmt::printf("The answer is %d.", 42);
std::string s = fmt::sprintf("Look, a %s!", "string");
* Support for hexadecimal floating point format specifiers ``a`` and ``A``:
.. code:: c++
print("{:a}", -42.0); // Prints -0x1.5p+5
print("{:A}", -42.0); // Prints -0X1.5P+5
* CMake option ``FMT_SHARED`` that specifies whether to build format as a
shared library (off by default).
2015-03-05 02:10:08 +00:00
0.9.0 - 2014-05-13
------------------
* More efficient implementation of variadic formatting functions.
2015-03-05 02:16:26 +00:00
* ``Writer::Format`` now has a variadic overload:
.. code:: c++
2015-03-05 02:10:08 +00:00
Writer out;
out.Format("Look, I'm {}!", "variadic");
* For efficiency and consistency with other overloads, variadic overload of
2015-03-05 02:16:26 +00:00
the ``Format`` function now returns ``Writer`` instead of ``std::string``.
Use the ``str`` function to convert it to ``std::string``:
.. code:: c++
2015-03-05 02:10:08 +00:00
std::string s = str(Format("Look, I'm {}!", "variadic"));
2015-03-05 02:16:26 +00:00
* Replaced formatter actions with output sinks: ``NoAction`` -> ``NullSink``,
``Write`` -> ``FileSink``, ``ColorWriter`` -> ``ANSITerminalSink``.
This improves naming consistency and shouldn't affect client code unless
these classes are used directly which should be rarely needed.
* Added ``ThrowSystemError`` function that formats a message and throws
``SystemError`` containing the formatted message and system-specific error
description. For example, the following code
2015-03-05 02:10:08 +00:00
2015-03-05 02:16:26 +00:00
.. code:: c++
2015-03-05 02:10:08 +00:00
FILE *f = fopen(filename, "r");
if (!f)
ThrowSystemError(errno, "Failed to open file '{}'") << filename;
2015-03-05 02:16:26 +00:00
will throw ``SystemError`` exception with description
2015-03-05 02:10:08 +00:00
"Failed to open file '<filename>': No such file or directory" if file
doesn't exist.
2015-03-05 02:49:23 +00:00
* Support for AppVeyor continuous integration platform.
2015-03-05 02:10:08 +00:00
2015-03-05 02:16:26 +00:00
* ``Format`` now throws ``SystemError`` in case of I/O errors.
2015-03-05 02:10:08 +00:00
* Improve test infrastructure. Print functions are now tested by redirecting
the output to a pipe.
0.8.0 - 2014-04-14
------------------
* Initial release