Releases: fmtlib/fmt
6.2.1
6.2.0
-
Improved error reporting when trying to format an object of a non-formattable type:
fmt::format("{}", S());
now gives:
include/fmt/core.h:1015:5: error: static_assert failed due to requirement 'formattable' "Cannot format argument. To make type T formattable provide a formatter<T> specialization: https://fmt.dev/latest/api.html#formatting-user-defined-types" static_assert( ^ ... note: in instantiation of function template specialization 'fmt::v6::format<char [3], S, char>' requested here fmt::format("{}", S()); ^if
Sis not formattable. -
Reduced library size by ~10%.
-
Always print decimal point if
#is specified (#1476, #1498):fmt::print("{:#.0f}", 42.0);
now prints
42. -
Implemented the
'L'specifier for locale-specific numeric formatting to improve compatibility withstd::format. The'n'specifier is now deprecated and will be removed in the next major release. -
Moved OS-specific APIs such as
windows_errorfromfmt/format.htofmt/os.h. You can defineFMT_DEPRECATED_INCLUDE_OSto automatically includefmt/os.hfromfmt/format.hfor compatibility but this will be disabled in the next major release. -
Added precision overflow detection in floating-point formatting.
-
Implemented detection of invalid use of
fmt::arg. -
Used
type_identityto block unnecessary template argument deduction. Thanks Tim Song. -
Improved UTF-8 handling (#1109):
fmt::print("┌{0:─^{2}}┐\n" "│{1: ^{2}}│\n" "└{0:─^{2}}┘\n", "", "Привет, мир!", 20);
now prints:
┌────────────────────┐ │ Привет, мир! │ └────────────────────┘on systems that support Unicode.
-
Added experimental dynamic argument storage (#1170, #1584):
fmt::dynamic_format_arg_store<fmt::format_context> store; store.push_back("answer"); store.push_back(42); fmt::vprint("The {} is {}.\n", store);
prints:
The answer is 42. -
Made
fmt::joinacceptinitializer_list(#1591). Thanks @Rapotkinnik (Nikolay Rapotkin). -
Fixed handling of empty tuples (#1588).
-
Fixed handling of output iterators in
format_to_n(#1506). -
Fixed formatting of
std::chrono::durationtypes to wide output (#1533). Thanks @zeffy (pilao). -
Added const
beginandendoverload to buffers (#1553). Thanks @dominicpoeschko. -
Added the ability to disable floating-point formatting via
FMT_USE_FLOAT,FMT_USE_DOUBLEandFMT_USE_LONG_DOUBLEmacros for extremely memory-constrained embedded system (#1590). Thanks @albaguirre (Alberto Aguirre). -
Made
FMT_STRINGwork withconstexprstring_view(#1589). Thanks @scramsby (Scott Ramsby). -
Implemented a minor optimization in the format string parser (#1560). Thanks @IkarusDeveloper.
-
Improved attribute detection (#1469, #1475, #1576). Thanks @federico-busato (Federico), @chronoxor (Ivan Shynkarenka), @refnum.
-
Improved documentation (#1481, #1523). Thanks @JackBoosY (Jack·Boos·Yu), @imba-tjd (谭九鼎).
-
Fixed symbol visibility on Linux when compiling with
-fvisibility=hidden(#1535). Thanks @milianw (Milian Wolff). -
Implemented various build configuration fixes and improvements (#1264, #1460, #1534, #1536, #1545, #1546, #1566, #1582, #1597, #1598). Thanks @ambitslix (Attila M. Szilagyi), @jwillikers (Jordan Williams), @stac47 (Laurent Stacul).
-
Fixed various warnings and compilation issues (#1433, #1461, #1470, #1480, #1485, #1492, #1493, #1504, #1505, #1512, #1515, #1516, #1518, #1519, #1520, #1521, #1522, #1524, #1530, #1531, #1532, #1539, #1547, #1548, #1554, #1567, #1568, #1569, #1571, #1573, #1575, #1581, #1583, #1586, #1587, #1594, #1596, #1604, #1606, #1607, #1609). Thanks @marti4d (Chris Martin), @iPherian, @parkertomatoes, @gsjaardema (Greg Sjaardema), @chronoxor (Ivan Shynkarenka), @DanielaE (Daniela Engert), @torsten48, @tohammer (Tobias Hammer), @lefticus (Jason Turner), @ryusakki (Haise), @adnsv (Alex Denisov), @fghzxm, @refnum, @pramodk (Pramod Kumbhar), @Spirrwell, @scramsby (Scott Ramsby).
6.1.2
-
Fixed ABI compatibility with
libfmt.so.6.0.0(#1471). -
Fixed handling types convertible to
std::string_view(#1451). Thanks @denizevrenci (Deniz Evrenci). -
Made CUDA test an opt-in enabled via the
FMT_CUDA_TESTCMake option. -
Fixed sign conversion warnings (#1440). Thanks @0x8000-0000 (Florin Iucha).
6.1.1
-
Fixed shared library build on Windows (#1443, #1445, #1446, #1450). Thanks @egorpugin (Egor Pugin), @bbolli (Beat Bolli).
-
Added a missing decimal point in exponent notation with trailing zeros.
-
Removed deprecated
format_arg_store::TYPES.
6.1.0
-
{fmt} now formats IEEE 754
floatanddoubleusing the shortest decimal representation with correct rounding by default:#include <cmath> #include <fmt/core.h> int main() { fmt::print("{}", M_PI); }
prints
3.141592653589793. -
Made the fast binary to decimal floating-point formatter the default, simplified it and improved performance. {fmt} is now 15 times faster than libc++'s
std::ostringstream, 11 times faster thanprintfand 10% faster than double-conversion on dtoa-benchmark:Function Time (ns) Speedup ostringstream 1,346.30 1.00x ostrstream 1,195.74 1.13x sprintf 995.08 1.35x doubleconv 99.10 13.59x fmt 88.34 15.24x -
{fmt} no longer converts
floatarguments todouble. In particular this improves the default (shortest) representation of floats and makesfmt::formatconsistent withstd::formatspecs (#1336, #1353, #1360, #1361):fmt::print("{}", 0.1f);
prints
0.1instead of0.10000000149011612. Thanks @orivej (Orivej Desh). -
Made floating-point formatting output consistent with
printf/iostreams (#1376, #1417). -
Added support for 128-bit integers (#1287):
fmt::print("{}", std::numeric_limits<__int128_t>::max());
prints
170141183460469231731687303715884105727. Thanks @denizevrenci (Deniz Evrenci). -
The overload of
printthat takestext_styleis now atomic, i.e. the output from different threads doesn't interleave (#1351). Thanks @tankiJong (Tanki Zhang). -
Made compile time in the header-only mode ~20% faster by reducing the number of template instantiations.
wchar_toverload ofvprintwas moved fromfmt/core.htofmt/format.h. -
Added an overload of
fmt::jointhat works with tuples (#1322, #1330):#include <tuple> #include <fmt/ranges.h> int main() { std::tuple<char, int, float> t{'a', 1, 2.0f}; fmt::print("{}", t); }
prints
('a', 1, 2.0). Thanks @jeremyong (Jeremy Ong). -
Changed formatting of octal zero with prefix from "00" to "0":
fmt::print("{:#o}", 0);
prints
0. -
The locale is now passed to ostream insertion (
<<) operators (#1406):#include <fmt/locale.h> #include <fmt/ostream.h> struct S { double value; }; std::ostream& operator<<(std::ostream& os, S s) { return os << s.value; } int main() { auto s = fmt::format(std::locale("fr_FR.UTF-8"), "{}", S{0.42}); // s == "0,42" }
Thanks @dlaugt (Daniel Laügt).
-
Locale-specific number formatting now uses grouping (#1393 #1394). Thanks @skrdaniel.
-
Fixed handling of types with deleted implicit rvalue conversion to
const char**(#1421):struct mystring { operator const char*() const&; operator const char*() &; operator const char*() const&& = delete; operator const char*() && = delete; }; mystring str; fmt::print("{}", str); // now compiles
-
Enums are now mapped to correct underlying types instead of
int(#1286). Thanks @agmt (Egor Seredin). -
Enum classes are no longer implicitly converted to
int(#1424). -
Added
basic_format_parse_contextfor consistency with C++20std::formatand deprecatedbasic_parse_context. -
Fixed handling of UTF-8 in precision (#1389, #1390). Thanks @tajtiattila (Attila Tajti).
-
{fmt} can now be installed on Linux, macOS and Windows with Conda using its conda-forge package (#1410):
conda install -c conda-forge fmtThanks @tdegeus (Tom de Geus).
-
Added a CUDA test (#1285, #1317). Thanks @luncliff (Park DongHa) and @risa2000.
-
Improved documentation (#1276, #1291, #1296, #1315, #1332, #1337, #1395 #1418). Thanks @waywardmonkeys (Bruce Mitchener), @pauldreik (Paul Dreik), @jackoalan (Jack Andersen).
-
Various code improvements (#1358, #1407). Thanks @orivej (Orivej Desh), @dpacbach (David P. Sicilia),
-
Fixed compile-time format string checks for user-defined types (#1292).
-
Worked around a false positive in
unsigned-integer-overflowsanitizer (#1377). -
Fixed various warnings and compilation issues (#1273, #1278, #1280, #1281, #1288, #1290, #1301, #1305, #1306, #1309, #1312, #1313, #1316, #1319, #1320, #1326, #1328, #1344, #1345, #1347, #1349, #1354, #1362, #1366, #1364, #1370, #1371, #1385, #1388, #1397, #1414, #1416, #1422 #1427, #1431, #1433). Thanks @hhb, @gsjaardema (Greg Sjaardema), @gabime (Gabi Melman), @neheb (Rosen Penev), @vedranmiletic (Vedran Miletić), @dkavolis (Daumantas Kavolis), @mwinterb, @orivej (Orivej Desh), @denizevrenci (Deniz Evrenci) @leonklingele, @chronoxor (Ivan Shynkarenka), @kent-tri, @0x8000-0000 (Florin Iucha), @marti4d (Chris Martin).
6.0.0
-
Switched to the MIT license with an optional exception that allows distributing binary code without attribution.
-
Floating-point formatting is now locale-independent by default:
#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
nspecifier:std::locale::global(std::locale("ru_RU.UTF-8")); fmt::print("value = {:n}", 4.2);
prints "value = 4,2".
-
Added an experimental Grisu floating-point formatting algorithm implementation (disabled by default). To enable it compile with the
FMT_USE_GRISUmacro defined to 1:#define FMT_USE_GRISU 1 #include <fmt/format.h> auto s = fmt::format("{}", 4.2); // formats 4.2 using Grisu
With Grisu enabled, {fmt} is 13x faster than
std::ostringstream(libc++) and 10x faster thansprintfon dtoa-benchmark (full results): -
Separated formatting and parsing contexts for consistency with C++20 std::format, removing the undocumented
basic_format_context::parse_context()function. -
Added oss-fuzz support (#1199). Thanks @pauldreik (Paul Dreik).
-
formatterspecializations now always take precedence overoperator<<(#952):#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::compilefunction that does format string compilation (#618, #1169, #1171):#include <fmt/compile.h> auto f = fmt::compile<int>("{}"); std::string s = fmt::format(f, 42); // can be called multiple times to format // different values // s == "42"
It moves the cost of parsing a format string outside of the format function which can be beneficial when identically formatting many objects of the same types. Thanks @stryku (Mateusz Janek).
-
Added experimental support for the
%format specifier that formats floating-point values as percentages (#1060, #1069, #1071):auto s = fmt::format("{:.1%}", 0.42); // s == "42.0%"
Thanks @gawain-bolton (Gawain Bolton).
-
Implemented precision for floating-point durations (#1004, #1012):
auto s = fmt::format("{:.1}", std::chrono::duration<double>(1.234)); // s == 1.2s
Thanks @DanielaE (Daniela Engert).
-
Implemented
chronoformat specifiers%Qand%qthat give the value and the unit respectively (#1019):auto value = fmt::format("{:%Q}", 42s); // value == "42" auto unit = fmt::format("{:%q}", 42s); // unit == "s"
Thanks @DanielaE (Daniela Engert).
-
Fixed handling of dynamic width in chrono formatter:
auto s = fmt::format("{0:{1}%H:%M:%S}", std::chrono::seconds(12345), 12); // ^ width argument index ^ width // s == "03:25:45 "
Thanks Howard Hinnant.
-
Removed deprecated
fmt/time.h. Usefmt/chrono.hinstead. -
Added
fmt::formatandfmt::vformatoverloads that taketext_style(#993, #994):#include <fmt/color.h> std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red), "The answer is {}.", 42);
Thanks @Naios (Denis Blank).
-
Removed the deprecated color API (
print_colored). Use the new API, namelyprintoverloads that taketext_styleinstead. -
Made
std::unique_ptrandstd::shared_ptrformattable as pointers viafmt::ptr(#1121):std::unique_ptr<int> p = ...; fmt::print("{}", fmt::ptr(p)); // prints p as a pointer
Thanks @sighingnow (Tao He).
-
Made
printandvprintreport I/O errors (#1098, #1099). Thanks @BillyDonahue (Billy Donahue). -
Marked deprecated APIs with the
[[deprecated]]attribute and removed internal uses of deprecated APIs (#1022). Thanks @eliaskosunen (Elias Kosunen). -
Modernized the codebase using more C++11 features and removing workarounds. Most importantly,
buffer_contextis now an alias template, so usebuffer_context<T>instead ofbuffer_context<T>::type. These features require GCC 4.8 or later. -
formatterspecializations now always take precedence over implicit conversions tointand the undocumentedconvert_to_inttrait is now deprecated. -
Moved the undocumented
basic_writer,writer, andwwritertypes to theinternalnamespace. -
Removed deprecated
basic_format_context::begin(). Useout()instead. -
Disallowed passing the result of
joinas an lvalue to prevent misuse. -
Refactored the undocumented structs that represent parsed format specifiers to simplify the API and allow multibyte fill.
-
Moved SFINAE to template parameters to reduce symbol sizes.
-
Switched to
fputwsfor writing wide strings so that it's no longer required to call_setmodeon Windows (#1229, #1243). Thanks @jackoalan (Jack Andersen). -
Improved literal-based API (#1254). Thanks @sylveon (Charles Milette).
-
Added support for exotic platforms without
uintptr_tsuch as IBM i (AS/400) which has 128-bit pointers and only 64-bit integers (#1059). -
Added Sublime Text syntax highlighting config (#1037). Thanks @Kronuz (Germán Méndez Bravo).
-
Added the
FMT_ENFORCE_COMPILE_STRINGmacro to enforce the use of compile-time format strings (#1231). Thanks @jackoalan (Jack Andersen). -
Stopped setting
CMAKE_BUILD_TYPEif {fmt} is a subproject (#1081). -
Various build improvements (#1039, #1078, #1091, #1103, #1177). Thanks @luncliff (Park DongHa), @jasonszang (Jason Shuo Zang), @olafhering (Olaf Hering), @Lecetem, @pauldreik (Paul Dreik).
-
Improved documentation (#1049, #1051, #1083, #1113, #1114, #1146, #1180, #1250, #1252, #1265). Thanks @mikelui (Michael Lui), @foonathan (Jonathan Müller), @BillyDonahue (Billy Donahue), @jwakely (Jonathan Wakely), @kaisbe (Kais Ben Salah), @sdebionne (Samuel Debionne).
-
Fixed ambiguous formatter specialization in
fmt/ranges.h(#1123). -
Fixed formatting of a non-empty
std::filesystem::pathwhich is an infinitely deep range of its components (#1268). -
Fixed handling of general output iterators when formatting characters (#1056, #1058). Thanks @abolz (Alexander Bolz).
-
Fixed handling of output iterators in
formatterspecialization for ranges (#1064). -
Fixed handling of exotic character types (#1188).
-
Made chrono formatting work with exceptions disabled (#1062).
-
Fixed DLL visibility issues (#1134, #1147). Thanks @denchat.
-
Disabled the use of UDL template extension on GCC 9 (#1148).
-
Removed misplaced
formatcompile-time checks fromprintf(#1173). -
Fixed issues in the experimental floating-point formatter (#1072, #1129, #1153, #1155, #1210, #1222). Thanks @alabuzhev (Alex Alabuzhev).
-
Fixed bugs discovered by fuzzing or during fuzzing integration (#1124, #1127, #1132, #1135, #1136, #1141, #1142, #1178, #1179, #1194). Thanks @pauldreik (Paul Dreik).
-
Fixed building tests on FreeBSD and Hurd (#1043). Thanks @jackyf (Eugene V. Lyubimkin).
-
Fixed various warnings and compilation issues (#998, #1006, #1008, #1011, #1025, #1027, #1028, #1029, #1030, #1031, #1054, #1063, #1068, #1074, #1075, #1079, #1086, #1088, #1089, #1094, #1101, #1102, #1105, #1107, #1115, #1117, #1118, #1120, #1123, #1139, #1140, #1143, #1144, #1150, #1151, #1152, #1154, #1156, #1159, #1175, #1181, #1186, #1187, #1191, #1197, #1200, #1203, #1205, #1206, #1213, #1214, #1217, #1228, #1230, #1232, #1235, #1236, #1240). Thanks @DanielaE (Daniela Engert), @mwinterb, @eliaskosunen (Elias Kosunen), @morinmorin, @ricco19 (Brian Ricciardelli), @waywardmonkeys (Bruce Mitchener), @chronoxor (Ivan Shynkarenka), @remyabel, @pauldreik (Paul Dreik), [@gsjaardema (...
5.3.0
-
Introduced experimental chrono formatting support:
#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, #967, #973):
#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:
Thanks @Rakete1111 (Nicolas).
-
Added support for 4-bit terminal colors (#968, #974)
#include <fmt/color.h> int main() { print(fg(fmt::terminal_color::red), "stop\n"); }
Note that these colors vary by terminal:
Thanks @Rakete1111 (Nicolas).
-
Parameterized formatting functions on the type of the format string (#880, #881, #883, #885, #897, #920). Any object of type
Sthat has an overloadedto_string_view(const S&)returningfmt::string_viewcan be used as a format string:namespace my_ns { inline string_view to_string_view(const my_string& s) { return {s.data(), s.length()}; } } std::string message = fmt::format(my_string("The answer is {}."), 42);
Thanks @DanielaE (Daniela Engert).
-
Made
std::string_viewwork as a format string (#898):auto message = fmt::format(std::string_view("The answer is {}."), 42);
Thanks @DanielaE (Daniela Engert).
-
Added wide string support to compile-time format string checks (#924):
print(fmt(L"{:f}"), 42); // compile-time error: invalid type specifier
Thanks @XZiar.
-
Made colored print functions work with wide strings (#867):
#include <fmt/color.h> int main() { print(fg(fmt::color::red), L"{}\n", 42); }
Thanks @DanielaE (Daniela Engert).
-
Introduced experimental Unicode support (#628, #891):
using namespace fmt::literals; auto s = fmt::format("{:*^5}"_u, "🤡"_u); // s == "**🤡**"_u
-
Improved locale support:
#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 (#921). Thanks @DanielaE (Daniela Engert).
-
Added
make_printf_argsandmake_wprintf_argsfunctions (#934). Thanks @tnovotny. -
Deprecated
fmt::visit,parse_context, andwparse_context. Usefmt::visit_format_arg,format_parse_context, andwformat_parse_contextinstead. -
Removed undocumented
basic_fixed_bufferwhich has been superseded by the iterator-based API (#873, #902). Thanks @superfunc (hollywood programmer). -
Disallowed repeated leading zeros in an argument ID:
fmt::print("{000}", 42); // error
-
Reintroduced support for gcc 4.4.
-
Fixed compilation on platforms with exotic
double(#878). -
Improved documentation (#164, #877, #901, #906, #979). Thanks @kookjr (Mathew Cucuzella), @DarkDimius (Dmitry Petrashko), @HecticSerenity.
-
Added pkgconfig support which makes it easier to consume the library from meson and other build systems (#916). Thanks @colemickens (Cole Mickens).
-
Various build improvements (#909, #926, #937, #953, #959). Thanks @tchaikov (Kefu Chai), @luncliff (Park DongHa), @AndreasSchoenle (Andreas Schönle), @hotwatermorning, @Zefz (JohanJansen).
-
Improved
string_viewconstruction performance (#914). Thanks @gabime (Gabi Melman). -
Fixed non-matching char types (#895). Thanks @DanielaE (Daniela Engert).
-
Fixed
format_to_nwithstd::back_insert_iterator(#913). Thanks @DanielaE (Daniela Engert). -
Fixed locale-dependent formatting (#905).
-
Fixed various compiler warnings and errors (#882, #886, #933, #941, #931, #943, #954, #956, #962, #965, #977, #983, #989). Thanks @Luthaf (Guillaume Fraux), @stevenhoving (Steven Hoving), @christinaa (Kristina Brooks), @lgritz (Larry Gritz), @DanielaE (Daniela Engert), @0x8000-0000 (Sign Bit), @liuping1997.
5.2.1
-
Fixed
visitlookup issues on gcc 7 & 8 (#870). Thanks @medithe. -
Fixed linkage errors on older gcc.
-
Prevented
fmt/range.hfrom specializingfmt::basic_string_view(#865, #868). Thanks @hhggit (dual). -
Improved error message when formatting unknown types (#872). Thanks @foonathan (Jonathan Müller),
-
Disabled templated user-defined literals when compiled under nvcc (#875). Thanks @CandyGumdrop (Candy Gumdrop),
-
Fixed
format_toformatting towmemory_buffer(#874).
5.2.0
-
Optimized format string parsing and argument processing which resulted in up to 5x speed up on long format strings and significant performance boost on various benchmarks. For example, version 5.2 is 2.22x faster than 5.1 on decimal integer formatting with
format_to(macOS, clang-902.0.39.2):Method Time, s Speedup fmt::format 5.1 0.58 fmt::format 5.2 0.35 1.66x fmt::format_to 5.1 0.51 fmt::format_to 5.2 0.23 2.22x sprintf 0.71 std::to_string 1.01 std::stringstream 1.73 -
Changed the
fmtmacro from opt-out to opt-in to prevent name collisions. To enable it define theFMT_STRING_ALIASmacro to 1 before includingfmt/format.h:#define FMT_STRING_ALIAS 1 #include <fmt/format.h> std::string answer = format(fmt("{}"), 42);
-
Added compile-time format string checks to
format_tooverload that takesfmt::memory_buffer(#783):fmt::memory_buffer buf; // Compile-time error: invalid type specifier. fmt::format_to(buf, fmt("{:d}"), "foo");
-
Moved experimental color support to
fmt/color.hand enabled the new API by default. The old API can be enabled by defining theFMT_DEPRECATED_COLORSmacro. -
Added formatting support for types explicitly convertible to
fmt::string_view: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*_tby replacing theformatfunction overloads with a single function template parameterized on the string type. -
Added support for dynamic argument lists (#814, #819). Thanks @MikePopoloski (Michael Popoloski).
-
Reduced executable size overhead for embedded targets using newlib nano by making locale dependency optional (#839). Thanks @teajay-fr (Thomas Benard).
-
Keep
noexceptspecifier when exceptions are disabled (#801, #810). Thanks @qis (Alexej Harm). -
Fixed formatting of user-defined types providing
operator<<withformat_to_n(#806). Thanks @mkurdej (Marek Kurdej). -
Fixed dynamic linkage of new symbols (#808).
-
Fixed global initialization issue (#807):
// This works on compilers with constexpr support. static const std::string answer = fmt::format("{}", 42);
-
Fixed various compiler warnings and errors (#804, #809, #811, #822, #827, #830, #838, #843, #844, #851, #852, #854). Thanks @henryiii (Henry Schreiner), @medithe, and @eliasdaler (Elias Daler).
5.1.0
-
Added experimental support for RGB color output enabled with the
FMT_EXTENDED_COLORSmacro:#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_coloredandvprint_coloredfunctions and thecolorenum) is now deprecated. (#762 #767). Thanks @Remotion (Remo). -
Added quotes to strings in ranges and tuples (#766). Thanks @Remotion (Remo).
-
Made
format_towork withbasic_memory_buffer(#776). -
Added
vformat_to_nandwchar_toverload offormat_to_n(#764, #769). -
Made
is_rangeandis_tuple_likepart of public (experimental) API to allow specialization for user-defined types (#751, #759). Thanks @drrlvn (Dror Levin). -
Added more compilers to continuous integration and increased
FMT_PEDANTICwarning levels (#736). Thanks @eliaskosunen (Elias Kosunen). -
Fixed compilation with MSVC 2013.
-
Fixed handling of user-defined types in
format_to(#793). -
Forced linking of inline
vformatfunctions into the library (#795). -
Fixed incorrect call to on_align in
'{:}='(#750). -
Fixed floating-point formatting to a non-back_insert_iterator with sign & numeric alignment specified (#756).
-
Fixed formatting to an array with
format_to_n(#778). -
Fixed formatting of more than 15 named arguments (#754).
-
Fixed handling of compile-time strings when including
fmt/ostream.h. (#768). -
Fixed various compiler warnings and errors (#742, #748, #752, #770, #775, #779, #780, #790, #792, #800). Thanks @Remotion (Remo), @gabime (Gabi Melman), @foonathan (Jonathan Müller), @Dark-Passenger (Dhruv Paranjape), and @0x8000-0000 (Sign Bit).