From d6047cdc4a787e5e2748f7228364bdb4812d131c Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Sat, 4 Jul 2020 15:46:48 -0700 Subject: [PATCH] Update changelog --- ChangeLog.md | 993 ++++++++++++++++++++++++++------------------------- 1 file changed, 497 insertions(+), 496 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 19aab670..976df7fd 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,14 +1,14 @@ 7.0.0 - TBD =========== -* Reduced the library size. For example, on macOS the stripped binary statically - linked with {fmt} [shrank from \~368k to less than - 100k](http://www.zverovich.net/2020/05/21/reducing-library-size.html). +* Reduced the library size. For example, on macOS a stripped binary + statically linked with {fmt} [shrank from \~368k to less than 100k]( + http://www.zverovich.net/2020/05/21/reducing-library-size.html). -* Added a simpler and more efficient [format string compilation - API](https://fmt.dev/dev/api.html#compile-api): +* Added a simpler and more efficient [format string compilation API]( + https://fmt.dev/dev/api.html#compile-api): - ``` {.c++} + ```c++ #include // Converts 42 into std::string using the most efficient method and no @@ -18,12 +18,13 @@ The old `fmt::compile` API is now deprecated. -* Optimized integer formatting: `format_to` with format string compilation and a - stack-allocated buffer is now [faster than to\_chars on both libc++ and - libstdc++](http://www.zverovich.net/2020/06/13/fast-int-to-string-revisited.html). +* Optimized integer formatting: `format_to` with format string compilation and + a stack-allocated buffer is now [faster than `to_chars` on both libc++ and + libstdc++]( + http://www.zverovich.net/2020/06/13/fast-int-to-string-revisited.html). * Applied extern templates to improve compile times when using the core API and - `fmt/format.h` ([\#1452]()). For example, on macOS with clang the compile time + `fmt/format.h` (#1452). For example, on macOS with clang the compile time of a test TU dropped from 2.3s to 0.3s with `-O2` and from 0.6s to 0.3s with the default settings (`-O0`). @@ -55,7 +56,7 @@ * Named arguments are now stored on stack (no dynamic memory allocations) and the generated binary code is more compact and efficient. For example - ``` {.c++} + ```c++ #include int main() { @@ -65,7 +66,7 @@ compiles to just ([godbolt](https://godbolt.org/z/NcfEp_)) - ``` {.asm} + ```asm .LC0: .string "answer" .LC1: @@ -92,9 +93,9 @@ .asciz "answer" ``` -* Implemented compile-time checks for dynamic width and precision ([\#1614]()): +* Implemented compile-time checks for dynamic width and precision (#1614): - ``` {.c++} + ```c++ #include int main() { @@ -115,9 +116,9 @@ if (id >= num_args_) on_error("argument not found"); ^ -* Added sentinel support to `fmt::join` ([\#1689]()): +* Added sentinel support to `fmt::join` (#1689): - ``` {.c++} + ```c++ struct zstring_sentinel {}; bool operator==(const char* p, zstring_sentinel) { return *p == '\0'; } bool operator!=(const char* p, zstring_sentinel) { return *p != '\0'; } @@ -135,15 +136,15 @@ Thanks [\@BRevzin (Barry Revzin)](https://github.com/BRevzin). * Added support for named args, `clear` and `reserve` to - `dynamic_format_arg_store` ([\#1655](), [\#1663](), [\#1674](), [\#1677]()). + `dynamic_format_arg_store` (#1655, #1663, #1674, #1677). Thanks [\@vsolontsov-ll (Vladimir Solontsov)](https://github.com/vsolontsov-ll). * Added support for the `'c'` format specifier to integral types for - compatibility with `std::format` ([\#1652]()). + compatibility with `std::format` (#1652). * Implemented the `'L'` format specifier for locale-specific formatting of - floating-point numbers for compatibility with `std::format` ([\#1624]()). The + floating-point numbers for compatibility with `std::format` (#1624). The `'n'` specifier is now disabled by default but can be enabled via the `FMT_DEPRECATED_N_SPECIFIER` macro. @@ -152,14 +153,14 @@ * Optimized handling of small format strings. For example, - ``` {.c++} + ```c++ fmt::format("Result: {}: ({},{},{},{})", str1, str2, str3, str4, str5) ``` - is now \~40% faster ([\#1685]()). + is now \~40% faster (#1685). * Improved compatibility between `fmt::printf` with the standard specs - ([\#1595](), [\#1682](), [\#1683](), [\#1687](), [\#1699](), [\#1717]()). + (#1595, #1682, #1683, #1687, #1699, #1717). Thanks [\@rimathia](https://github.com/rimathia). * Fixed handling of `` operator<<` overloads that use ``copyfmt\`[ @@ -179,24 +180,24 @@ * Deprecated `arg_formatter`. -* Renamed the `internal` namespace to `detail` ([\#1538]()). The former is still +* Renamed the `internal` namespace to `detail` (#1538). The former is still provided as an alias if the `FMT_USE_INTERNAL` macro is defined. * Added the `FMT_OS` CMake option to control inclusion of OS-specific APIs in - the fmt target. This can be useful for embedded platforms ([\#1654](), - [\#1656]()). Thanks [\@kwesolowski (Krzysztof + the fmt target. This can be useful for embedded platforms (#1654, + #1656). Thanks [\@kwesolowski (Krzysztof Wesolowski)](https://github.com/kwesolowski). * Replaced `FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION` with the `FMT_FUZZ` macro - to prevent interferring with fuzzing of projects using {fmt} ([\#1650]()). + to prevent interferring with fuzzing of projects using {fmt} (#1650). Thanks [\@asraa (Asra Ali)](https://github.com/asraa). -* Fixed compatibility with emscripten ([\#1736](), [\#1737]()). Thanks +* Fixed compatibility with emscripten (#1736, #1737). Thanks [\@ArthurSonzogni (Arthur Sonzogni)](https://github.com/ArthurSonzogni). -* Improved documentation ([\#704](), [\#1643](), [\#1660](), [\#1681](), - [\#1691](), [\#1706](), [\#1714](), [\#1721](), [\#1739](), [\#1740](), - [\#1741]()). Thanks [\@senior7515 (Alexander +* Improved documentation (#704, #1643, #1660, #1681, + #1691, #1706, #1714, #1721, #1739, #1740, + #1741). Thanks [\@senior7515 (Alexander Gallego)](https://github.com/senior7515), [\@lsr0 (Lindsay Roberts)](https://github.com/lsr0), [\@puetzk (Kevin Puetz)](https://github.com/puetzk), [\@fpelliccioni (Fernando @@ -206,18 +207,18 @@ (文佳鹏)](https://github.com/jiapengwen), [\@gsjaardema (Greg Sjaardema)](https://github.com/gsjaardema). -* Implemented various build configuration fixes and improvements ([\#1603](), - [\#1657](), [\#1702](), [\#1728]()). Thanks [\@scramsby (Scott +* Implemented various build configuration fixes and improvements (#1603, + #1657, #1702, #1728). Thanks [\@scramsby (Scott Ramsby)](https://github.com/scramsby), [\@jtojnar (Jan Tojnar)](https://github.com/jtojnar), [\@orivej (Orivej Desh)](https://github.com/orivej), [\@flagarde](https://github.com/flagarde). -* Fixed various warnings and compilation issues ([\#1616](), [\#1620](), - [\#1622](), [\#1625](), [\#1627](), [\#1628](), [\#1629](), [\#1631](), - [\#1633](), [\#1649](), [\#1658](), [\#1661](), [\#1667](), [\#1668](), - [\#1669](), [\#1692](), [\#1696](), [\#1697](), [\#1707](), [\#1712](), - [\#1716](), [\#1722](), [\#1724](), [\#1729](), [\#1738](), [\#1742](), - [\#1743](), [\#1744](), [\#1747](), [\#1750]()). Thanks [\@gsjaardema (Greg +* Fixed various warnings and compilation issues (#1616, #1620, + #1622, #1625, #1627, #1628, #1629, #1631, + #1633, #1649, #1658, #1661, #1667, #1668, + #1669, #1692, #1696, #1697, #1707, #1712, + #1716, #1722, #1724, #1729, #1738, #1742, + #1743, #1744, #1747, #1750). Thanks [\@gsjaardema (Greg Sjaardema)](https://github.com/gsjaardema), [\@gabime (Gabi Melman)](https://github.com/gabime), [\@johnor (Johan)](https://github.com/johnor), [\@gabime (Dmitry @@ -236,9 +237,9 @@ 6.2.1 - 2020-05-09 ================== -* Fixed ostream support in `sprintf` ([\#1631]()). +* Fixed ostream support in `sprintf` (#1631). * Fixed type detection when using implicit conversion to `string_view` and - ostream `operator<<` inconsistently ([\#1662]()). + ostream `operator<<` inconsistently (#1662). 6.2.0 - 2020-04-05 ================== @@ -246,7 +247,7 @@ * Improved error reporting when trying to format an object of a non-formattable type: - ``` {.c++} + ```c++ fmt::format("{}", S()); ``` @@ -268,9 +269,9 @@ * Reduced the library size by \~10%. -* Always print decimal point if `#` is specified ([\#1476](), [\#1498]()): +* Always print decimal point if `#` is specified (#1476, #1498): - ``` {.c++} + ```c++ fmt::print("{:#.0f}", 42.0); ``` @@ -292,9 +293,9 @@ * Used `type_identity` to block unnecessary template argument deduction. Thanks Tim Song. -* Improved UTF-8 handling ([\#1109]()): +* Improved UTF-8 handling (#1109): - ``` {.c++} + ```c++ fmt::print("┌{0:─^{2}}┐\n" "│{1: ^{2}}│\n" "└{0:─^{2}}┘\n", "", "Привет, мир!", 20); @@ -308,9 +309,9 @@ on systems that support Unicode. -* Added experimental dynamic argument storage ([\#1170](), [\#1584]()): +* Added experimental dynamic argument storage (#1170, #1584): - ``` {.c++} + ```c++ fmt::dynamic_format_arg_store store; store.push_back("answer"); store.push_back(42); @@ -324,57 +325,57 @@ Thanks [\@vsolontsov-ll (Vladimir Solontsov)](https://github.com/vsolontsov-ll). -* Made `fmt::join` accept `initializer_list` ([\#1591]()). Thanks [\@Rapotkinnik +* Made `fmt::join` accept `initializer_list` (#1591). Thanks [\@Rapotkinnik (Nikolay Rapotkin)](https://github.com/Rapotkinnik). -* Fixed handling of empty tuples ([\#1588]()). +* Fixed handling of empty tuples (#1588). -* Fixed handling of output iterators in `format_to_n` ([\#1506]()). +* Fixed handling of output iterators in `format_to_n` (#1506). -* Fixed formatting of `std::chrono::duration` types to wide output ([\#1533]()). +* Fixed formatting of `std::chrono::duration` types to wide output (#1533). Thanks [\@zeffy (pilao)](https://github.com/zeffy). -* Added const `begin` and `end` overload to buffers ([\#1553]()). Thanks +* Added const `begin` and `end` overload to buffers (#1553). Thanks [\@dominicpoeschko](https://github.com/dominicpoeschko). * Added the ability to disable floating-point formatting via `FMT_USE_FLOAT`, `FMT_USE_DOUBLE` and `FMT_USE_LONG_DOUBLE` macros for extremely - memory-constrained embedded system ([\#1590]()). Thanks [\@albaguirre (Alberto + memory-constrained embedded system (#1590). Thanks [\@albaguirre (Alberto Aguirre)](https://github.com/albaguirre). -* Made `FMT_STRING` work with `constexpr` `string_view` ([\#1589]()). Thanks +* Made `FMT_STRING` work with `constexpr` `string_view` (#1589). Thanks [\@scramsby (Scott Ramsby)](https://github.com/scramsby). -* Implemented a minor optimization in the format string parser ([\#1560]()). +* Implemented a minor optimization in the format string parser (#1560). Thanks [\@IkarusDeveloper](https://github.com/IkarusDeveloper). -* Improved attribute detection ([\#1469](), [\#1475](), [\#1576]()). Thanks +* Improved attribute detection (#1469, #1475, #1576). Thanks [\@federico-busato (Federico)](https://github.com/federico-busato), [\@chronoxor (Ivan Shynkarenka)](https://github.com/chronoxor), [\@refnum](https://github.com/refnum). -* Improved documentation ([\#1481](), [\#1523]()). Thanks [\@JackBoosY +* Improved documentation (#1481, #1523). Thanks [\@JackBoosY (Jack·Boos·Yu)](https://github.com/JackBoosY), [\@imba-tjd (谭九鼎)](https://github.com/imba-tjd). * Fixed symbol visibility on Linux when compiling with `-fvisibility=hidden` - ([\#1535]()). Thanks [\@milianw (Milian Wolff)](https://github.com/milianw). + (#1535). Thanks [\@milianw (Milian Wolff)](https://github.com/milianw). -* Implemented various build configuration fixes and improvements ([\#1264](), - [\#1460](), [\#1534](), [\#1536](), [\#1545](), [\#1546](), [\#1566](), - [\#1582](), [\#1597](), [\#1598]()). Thanks [\@ambitslix (Attila M. +* Implemented various build configuration fixes and improvements (#1264, + #1460, #1534, #1536, #1545, #1546, #1566, + #1582, #1597, #1598). Thanks [\@ambitslix (Attila M. Szilagyi)](https://github.com/ambitslix), [\@jwillikers (Jordan Williams)](https://github.com/jwillikers), [\@stac47 (Laurent Stacul)](https://github.com/stac47). -* Fixed various warnings and compilation issues ([\#1433](), [\#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 +* 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)](https://github.com/marti4d), [\@iPherian](https://github.com/iPherian), [\@parkertomatoes](https://github.com/parkertomatoes), [\@gsjaardema (Greg @@ -394,18 +395,18 @@ 6.1.2 - 2019-12-11 ================== -* Fixed ABI compatibility with `libfmt.so.6.0.0` ([\#1471]()). -* Fixed handling types convertible to `std::string_view` ([\#1451]()). Thanks +* Fixed ABI compatibility with `libfmt.so.6.0.0` (#1471). +* Fixed handling types convertible to `std::string_view` (#1451). Thanks [\@denizevrenci (Deniz Evrenci)](https://github.com/denizevrenci). * Made CUDA test an opt-in enabled via the `FMT_CUDA_TEST` CMake option. -* Fixed sign conversion warnings ([\#1440]()). Thanks [\@0x8000-0000 (Florin +* Fixed sign conversion warnings (#1440). Thanks [\@0x8000-0000 (Florin Iucha)](https://github.com/0x8000-0000). 6.1.1 - 2019-12-04 ================== -* Fixed shared library build on Windows ([\#1443](), [\#1445](), [\#1446](), - [\#1450]()). Thanks [\@egorpugin (Egor Pugin)](https://github.com/egorpugin), +* Fixed shared library build on Windows (#1443, #1445, #1446, + #1450). Thanks [\@egorpugin (Egor Pugin)](https://github.com/egorpugin), [\@bbolli (Beat Bolli)](https://github.com/bbolli). * Added a missing decimal point in exponent notation with trailing zeros. * Removed deprecated `format_arg_store::TYPES`. @@ -416,7 +417,7 @@ * {fmt} now formats IEEE 754 `float` and `double` using the shortest decimal representation with correct rounding by default: - ``` {.c++} + ```c++ #include #include @@ -451,10 +452,10 @@ * {fmt} no longer converts `float` arguments to `double`. In particular this improves the default (shortest) representation of floats and makes - `fmt::format` consistent with `std::format` specs ([\#1336](), [\#1353](), - [\#1360](), [\#1361]()): + `fmt::format` consistent with `std::format` specs (#1336, #1353, + #1360, #1361): - ``` {.c++} + ```c++ fmt::print("{}", 0.1f); ``` @@ -463,11 +464,11 @@ Thanks [\@orivej (Orivej Desh)](https://github.com/orivej). * Made floating-point formatting output consistent with `printf`/iostreams - ([\#1376](), [\#1417]()). + (#1376, #1417). -* Added support for 128-bit integers ([\#1287]()): +* Added support for 128-bit integers (#1287): - ``` {.c++} + ```c++ fmt::print("{}", std::numeric_limits<__int128_t>::max()); ``` @@ -476,17 +477,17 @@ Thanks [\@denizevrenci (Deniz Evrenci)](https://github.com/denizevrenci). * The overload of `print` that takes `text_style` is now atomic, i.e. the output - from different threads doesn\'t interleave ([\#1351]()). Thanks [\@tankiJong + from different threads doesn\'t interleave (#1351). Thanks [\@tankiJong (Tanki Zhang)](https://github.com/tankiJong). * Made compile time in the header-only mode \~20% faster by reducing the number of template instantiations. `wchar_t` overload of `vprint` was moved from `fmt/core.h` to `fmt/format.h`. -* Added an overload of `fmt::join` that works with tuples ([\#1322](), - [\#1330]()): +* Added an overload of `fmt::join` that works with tuples (#1322, + #1330): - ``` {.c++} + ```c++ #include #include @@ -502,15 +503,15 @@ * Changed formatting of octal zero with prefix from \"00\" to \"0\": - ``` {.c++} + ```c++ fmt::print("{:#o}", 0); ``` prints `0`. -* The locale is now passed to ostream insertion (`<<`) operators ([\#1406]()): +* The locale is now passed to ostream insertion (`<<`) operators (#1406): - ``` {.c++} + ```c++ #include #include @@ -530,13 +531,13 @@ Thanks [\@dlaugt (Daniel Laügt)](https://github.com/dlaugt). -* Locale-specific number formatting now uses grouping ([\#1393](), [\#1394]()). +* Locale-specific number formatting now uses grouping (#1393, #1394). Thanks [\@skrdaniel](https://github.com/skrdaniel). * Fixed handling of types with deleted implicit rvalue conversion to - `const char**` ([\#1421]()): + `const char**` (#1421): - ``` {.c++} + ```c++ struct mystring { operator const char*() const&; operator const char*() &; @@ -548,51 +549,51 @@ ``` * Enums are now mapped to correct underlying types instead of `int` - ([\#1286]()). Thanks [\@agmt (Egor Seredin)](https://github.com/agmt). + (#1286). Thanks [\@agmt (Egor Seredin)](https://github.com/agmt). -* Enum classes are no longer implicitly converted to `int` ([\#1424]()). +* Enum classes are no longer implicitly converted to `int` (#1424). * Added `basic_format_parse_context` for consistency with C++20 `std::format` and deprecated `basic_parse_context`. -* Fixed handling of UTF-8 in precision ([\#1389](), [\#1390]()). Thanks +* Fixed handling of UTF-8 in precision (#1389, #1390). Thanks [\@tajtiattila (Attila Tajti)](https://github.com/tajtiattila). * {fmt} can now be installed on Linux, macOS and Windows with [Conda](https://docs.conda.io/en/latest/) using its [conda-forge](https://conda-forge.org) - [package](https://github.com/conda-forge/fmt-feedstock) ([\#1410]()): + [package](https://github.com/conda-forge/fmt-feedstock) (#1410): conda install -c conda-forge fmt Thanks [\@tdegeus (Tom de Geus)](https://github.com/tdegeus). -* Added a CUDA test ([\#1285](), [\#1317]()). Thanks [\@luncliff (Park +* Added a CUDA test (#1285, #1317). Thanks [\@luncliff (Park DongHa)](https://github.com/luncliff) and [\@risa2000](https://github.com/risa2000). -* Improved documentation ([\#1276](), [\#1291](), [\#1296](), [\#1315](), - [\#1332](), [\#1337](), [\#1395]() [\#1418]()). Thanks [\@waywardmonkeys +* Improved documentation (#1276, #1291, #1296, #1315, + #1332, #1337, #1395 #1418). Thanks [\@waywardmonkeys (Bruce Mitchener)](https://github.com/waywardmonkeys), [\@pauldreik (Paul Dreik)](https://github.com/pauldreik), [\@jackoalan (Jack Andersen)](https://github.com/jackoalan). -* Various code improvements ([\#1358](), [\#1407]()). Thanks [\@orivej (Orivej +* Various code improvements (#1358, #1407). Thanks [\@orivej (Orivej Desh)](https://github.com/orivej), [\@dpacbach (David P. Sicilia)](https://github.com/dpacbach), -* Fixed compile-time format string checks for user-defined types ([\#1292]()). +* Fixed compile-time format string checks for user-defined types (#1292). * Worked around a false positive in `unsigned-integer-overflow` sanitizer - ([\#1377]()). + (#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 +* 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](https://github.com/hhb), [\@gsjaardema (Greg Sjaardema)](https://github.com/gsjaardema), [\@gabime (Gabi Melman)](https://github.com/gabime), [\@neheb (Rosen @@ -618,7 +619,7 @@ * Floating-point formatting is now locale-independent by default: - ``` {.c++} + ```c++ #include #include @@ -632,7 +633,7 @@ For locale-specific formatting use the `n` specifier: - ``` {.c++} + ```c++ std::locale::global(std::locale("ru_RU.UTF-8")); fmt::print("value = {:n}", 4.2); ``` @@ -643,7 +644,7 @@ (disabled by default). To enable it compile with the `FMT_USE_GRISU` macro defined to 1: - ``` {.c++} + ```c++ #define FMT_USE_GRISU 1 #include @@ -661,13 +662,13 @@ std::format](http://eel.is/c++draft/format), removing the undocumented `basic_format_context::parse_context()` function. -* Added [oss-fuzz](https://github.com/google/oss-fuzz) support ([\#1199]()). +* Added [oss-fuzz](https://github.com/google/oss-fuzz) support (#1199). Thanks [\@pauldreik (Paul Dreik)](https://github.com/pauldreik). * `formatter` specializations now always take precedence over `operator<<` - ([\#952]()): + (#952): - ``` {.c++} + ```c++ #include #include @@ -691,9 +692,9 @@ ``` * Introduced the experimental `fmt::compile` function that does format string - compilation ([\#618](), [\#1169](), [\#1171]()): + compilation (#618, #1169, #1171): - ``` {.c++} + ```c++ #include auto f = fmt::compile("{}"); @@ -707,17 +708,17 @@ types. Thanks [\@stryku (Mateusz Janek)](https://github.com/stryku). * Added experimental `%` format specifier that formats floating-point values as - percentages ([\#1060](), [\#1069](), [\#1071]()): + percentages (#1060, #1069, #1071): - ``` {.c++} + ```c++ auto s = fmt::format("{:.1%}", 0.42); // s == "42.0%" ``` Thanks [\@gawain-bolton (Gawain Bolton)](https://github.com/gawain-bolton). -* Implemented precision for floating-point durations ([\#1004](), [\#1012]()): +* Implemented precision for floating-point durations (#1004, #1012): - ``` {.c++} + ```c++ auto s = fmt::format("{:.1}", std::chrono::duration(1.234)); // s == 1.2s ``` @@ -725,9 +726,9 @@ Thanks [\@DanielaE (Daniela Engert)](https://github.com/DanielaE). * Implemented `chrono` format specifiers `%Q` and `%q` that give the value and - the unit respectively ([\#1019]()): + the unit respectively (#1019): - ``` {.c++} + ```c++ auto value = fmt::format("{:%Q}", 42s); // value == "42" auto unit = fmt::format("{:%q}", 42s); // unit == "s" ``` @@ -736,7 +737,7 @@ * Fixed handling of dynamic width in chrono formatter: - ``` {.c++} + ```c++ auto s = fmt::format("{0:{1}%H:%M:%S}", std::chrono::seconds(12345), 12); // ^ width argument index ^ width // s == "03:25:45 " @@ -747,9 +748,9 @@ * Removed deprecated `fmt/time.h`. Use `fmt/chrono.h` instead. * Added `fmt::format` and `fmt::vformat` overloads that take `text_style` - ([\#993](), [\#994]()): + (#993, #994): - ``` {.c++} + ```c++ #include std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red), @@ -762,20 +763,20 @@ `print` overloads that take `text_style` instead. * Made `std::unique_ptr` and `std::shared_ptr` formattable as pointers via - `fmt::ptr` ([\#1121]()): + `fmt::ptr` (#1121): - ``` {.c++} + ```c++ std::unique_ptr p = ...; fmt::print("{}", fmt::ptr(p)); // prints p as a pointer ``` Thanks [\@sighingnow (Tao He)](https://github.com/sighingnow). -* Made `print` and `vprint` report I/O errors ([\#1098](), [\#1099]()). Thanks +* Made `print` and `vprint` report I/O errors (#1098, #1099). Thanks [\@BillyDonahue (Billy Donahue)](https://github.com/BillyDonahue). * Marked deprecated APIs with the `[[deprecated]]` attribute and removed - internal uses of deprecated APIs ([\#1022]()). Thanks [\@eliaskosunen (Elias + internal uses of deprecated APIs (#1022). Thanks [\@eliaskosunen (Elias Kosunen)](https://github.com/eliaskosunen). * Modernized the codebase using more C++11 features and removing workarounds. @@ -800,35 +801,35 @@ * Moved SFINAE to template parameters to reduce symbol sizes. * Switched to `fputws` for writing wide strings so that it\'s no longer required - to call `_setmode` on Windows ([\#1229](), [\#1243]()). Thanks [\@jackoalan + to call `_setmode` on Windows (#1229, #1243). Thanks [\@jackoalan (Jack Andersen)](https://github.com/jackoalan). -* Improved literal-based API ([\#1254]()). Thanks [\@sylveon (Charles +* Improved literal-based API (#1254). Thanks [\@sylveon (Charles Milette)](https://github.com/sylveon). * Added support for exotic platforms without `uintptr_t` such as IBM i (AS/400) - which has 128-bit pointers and only 64-bit integers ([\#1059]()). + which has 128-bit pointers and only 64-bit integers (#1059). * Added [Sublime Text syntax highlighting config](https://github.com/fmtlib/fmt/blob/master/support/C%2B%2B.sublime-syntax) - ([\#1037]()). Thanks [\@Kronuz (Germán Méndez + (#1037). Thanks [\@Kronuz (Germán Méndez Bravo)](https://github.com/Kronuz). * Added the `FMT_ENFORCE_COMPILE_STRING` macro to enforce the use of - compile-time format strings ([\#1231]()). Thanks [\@jackoalan (Jack + compile-time format strings (#1231). Thanks [\@jackoalan (Jack Andersen)](https://github.com/jackoalan). -* Stopped setting `CMAKE_BUILD_TYPE` if {fmt} is a subproject ([\#1081]()). +* Stopped setting `CMAKE_BUILD_TYPE` if {fmt} is a subproject (#1081). -* Various build improvements ([\#1039](), [\#1078](), [\#1091](), [\#1103](), - [\#1177]()). Thanks [\@luncliff (Park DongHa)](https://github.com/luncliff), +* Various build improvements (#1039, #1078, #1091, #1103, + #1177). Thanks [\@luncliff (Park DongHa)](https://github.com/luncliff), [\@jasonszang (Jason Shuo Zang)](https://github.com/jasonszang), [\@olafhering (Olaf Hering)](https://github.com/olafhering), [\@Lecetem](https://github.com/Lectem), [\@pauldreik (Paul Dreik)](https://github.com/pauldreik). -* Improved documentation ([\#1049](), [\#1051](), [\#1083](), [\#1113](), - [\#1114](), [\#1146](), [\#1180](), [\#1250](), [\#1252](), [\#1265]()). +* Improved documentation (#1049, #1051, #1083, #1113, + #1114, #1146, #1180, #1250, #1252, #1265). Thanks [\@mikelui (Michael Lui)](https://github.com/mikelui), [\@foonathan (Jonathan Müller)](https://github.com/foonathan), [\@BillyDonahue (Billy Donahue)](https://github.com/BillyDonahue), [\@jwakely (Jonathan @@ -836,52 +837,52 @@ Salah)](https://github.com/kaisbe), [\@sdebionne (Samuel Debionne)](https://github.com/sdebionne). -* Fixed ambiguous formatter specialization in `fmt/ranges.h` ([\#1123]()). +* Fixed ambiguous formatter specialization in `fmt/ranges.h` (#1123). * Fixed formatting of a non-empty `std::filesystem::path` which is an infinitely - deep range of its components ([\#1268]()). + deep range of its components (#1268). * Fixed handling of general output iterators when formatting characters - ([\#1056](), [\#1058]()). Thanks [\@abolz (Alexander + (#1056, #1058). Thanks [\@abolz (Alexander Bolz)](https://github.com/abolz). * Fixed handling of output iterators in `formatter` specialization for ranges - ([\#1064]()). + (#1064). -* Fixed handling of exotic character types ([\#1188]()). +* Fixed handling of exotic character types (#1188). -* Made chrono formatting work with exceptions disabled ([\#1062]()). +* Made chrono formatting work with exceptions disabled (#1062). -* Fixed DLL visibility issues ([\#1134](), [\#1147]()). Thanks +* Fixed DLL visibility issues (#1134, #1147). Thanks [\@denchat](https://github.com/denchat). -* Disabled the use of UDL template extension on GCC 9 ([\#1148]()). +* Disabled the use of UDL template extension on GCC 9 (#1148). -* Removed misplaced `format` compile-time checks from `printf` ([\#1173]()). +* Removed misplaced `format` compile-time checks from `printf` (#1173). -* Fixed issues in the experimental floating-point formatter ([\#1072](), - [\#1129](), [\#1153](), [\#1155](), [\#1210](), [\#1222]()). Thanks +* Fixed issues in the experimental floating-point formatter (#1072, + #1129, #1153, #1155, #1210, #1222). Thanks [\@alabuzhev (Alex Alabuzhev)](https://github.com/alabuzhev). -* Fixed bugs discovered by fuzzing or during fuzzing integration ([\#1124](), - [\#1127](), [\#1132](), [\#1135](), [\#1136](), [\#1141](), [\#1142](), - [\#1178](), [\#1179](), [\#1194]()). Thanks [\@pauldreik (Paul +* Fixed bugs discovered by fuzzing or during fuzzing integration (#1124, + #1127, #1132, #1135, #1136, #1141, #1142, + #1178, #1179, #1194). Thanks [\@pauldreik (Paul Dreik)](https://github.com/pauldreik). -* Fixed building tests on FreeBSD and Hurd ([\#1043]()). Thanks [\@jackyf +* Fixed building tests on FreeBSD and Hurd (#1043). Thanks [\@jackyf (Eugene V. Lyubimkin)](https://github.com/jackyf). -* 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 +* 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)](https://github.com/DanielaE), [\@mwinterb](https://github.com/mwinterb), [\@eliaskosunen (Elias Kosunen)](https://github.com/eliaskosunen), @@ -906,7 +907,7 @@ * Introduced experimental chrono formatting support: - ``` {.c++} + ```c++ #include int main() { @@ -923,9 +924,9 @@ * Added experimental support for emphasis (bold, italic, underline, strikethrough), colored output to a file stream, and improved colored - formatting API ([\#961](), [\#967](), [\#973]()): + formatting API (#961, #967, #973): - ``` {.c++} + ```c++ #include int main() { @@ -944,9 +945,9 @@ Thanks [\@Rakete1111 (Nicolas)](https://github.com/Rakete1111). -* Added support for 4-bit terminal colors ([\#968](), [\#974]()) +* Added support for 4-bit terminal colors (#968, #974) - ``` {.c++} + ```c++ #include int main() { @@ -961,11 +962,11 @@ Thanks [\@Rakete1111 (Nicolas)](https://github.com/Rakete1111). * Parameterized formatting functions on the type of the format string - ([\#880](), [\#881](), [\#883](), [\#885](), [\#897](), [\#920]()). Any object + (#880, #881, #883, #885, #897, #920). Any object of type `S` that has an overloaded `to_string_view(const S&)` returning `fmt::string_view` can be used as a format string: - ``` {.c++} + ```c++ namespace my_ns { inline string_view to_string_view(const my_string& s) { return {s.data(), s.length()}; @@ -977,25 +978,25 @@ Thanks [\@DanielaE (Daniela Engert)](https://github.com/DanielaE). -* Made `std::string_view` work as a format string ([\#898]()): +* Made `std::string_view` work as a format string (#898): - ``` {.c++} + ```c++ auto message = fmt::format(std::string_view("The answer is {}."), 42); ``` Thanks [\@DanielaE (Daniela Engert)](https://github.com/DanielaE). -* Added wide string support to compile-time format string checks ([\#924]()): +* Added wide string support to compile-time format string checks (#924): - ``` {.c++} + ```c++ print(fmt(L"{:f}"), 42); // compile-time error: invalid type specifier ``` Thanks [\@XZiar](https://github.com/XZiar). -* Made colored print functions work with wide strings ([\#867]()): +* Made colored print functions work with wide strings (#867): - ``` {.c++} + ```c++ #include int main() { @@ -1005,16 +1006,16 @@ Thanks [\@DanielaE (Daniela Engert)](https://github.com/DanielaE). -* Introduced experimental Unicode support ([\#628](), [\#891]()): +* Introduced experimental Unicode support (#628, #891): - ``` {.c++} + ```c++ using namespace fmt::literals; auto s = fmt::format("{:*^5}"_u, "🤡"_u); // s == "**🤡**"_u ``` * Improved locale support: - ``` {.c++} + ```c++ #include struct numpunct : std::numpunct { @@ -1027,10 +1028,10 @@ // s == "1~234~567" ``` -* Constrained formatting functions on proper iterator types ([\#921]()). Thanks +* Constrained formatting functions on proper iterator types (#921). Thanks [\@DanielaE (Daniela Engert)](https://github.com/DanielaE). -* Added `make_printf_args` and `make_wprintf_args` functions ([\#934]()). Thanks +* Added `make_printf_args` and `make_wprintf_args` functions (#934). Thanks [\@tnovotny](https://github.com/tnovotny). * Deprecated `fmt::visit`, `parse_context`, and `wparse_context`. Use @@ -1038,49 +1039,49 @@ instead. * Removed undocumented `basic_fixed_buffer` which has been superseded by the - iterator-based API ([\#873](), [\#902]()). Thanks [\@superfunc (hollywood + iterator-based API (#873, #902). Thanks [\@superfunc (hollywood programmer)](https://github.com/superfunc). * Disallowed repeated leading zeros in an argument ID: - ``` {.c++} + ```c++ fmt::print("{000}", 42); // error ``` * Reintroduced support for gcc 4.4. -* Fixed compilation on platforms with exotic `double` ([\#878]()). +* Fixed compilation on platforms with exotic `double` (#878). -* Improved documentation ([\#164](), [\#877](), [\#901](), [\#906](), - [\#979]()). Thanks [\@kookjr (Mathew Cucuzella)](https://github.com/kookjr), +* Improved documentation (#164, #877, #901, #906, + #979). Thanks [\@kookjr (Mathew Cucuzella)](https://github.com/kookjr), [\@DarkDimius (Dmitry Petrashko)](https://github.com/DarkDimius), [\@HecticSerenity](https://github.com/HecticSerenity). * Added pkgconfig support which makes it easier to consume the library from - meson and other build systems ([\#916]()). Thanks [\@colemickens (Cole + meson and other build systems (#916). Thanks [\@colemickens (Cole Mickens)](https://github.com/colemickens). -* Various build improvements ([\#909](), [\#926](), [\#937](), [\#953](), - [\#959]()). Thanks [\@tchaikov (Kefu Chai)](https://github.com/tchaikov), +* Various build improvements (#909, #926, #937, #953, + #959). Thanks [\@tchaikov (Kefu Chai)](https://github.com/tchaikov), [\@luncliff (Park DongHa)](https://github.com/luncliff), [\@AndreasSchoenle (Andreas Schönle)](https://github.com/AndreasSchoenle), [\@hotwatermorning](https://github.com/hotwatermorning), [\@Zefz (JohanJansen)](https://github.com/Zefz). -* Improved `string_view` construction performance ([\#914]()). Thanks [\@gabime +* Improved `string_view` construction performance (#914). Thanks [\@gabime (Gabi Melman)](https://github.com/gabime). -* Fixed non-matching char types ([\#895]()). Thanks [\@DanielaE (Daniela +* Fixed non-matching char types (#895). Thanks [\@DanielaE (Daniela Engert)](https://github.com/DanielaE). -* Fixed `format_to_n` with `std::back_insert_iterator` ([\#913]()). Thanks +* Fixed `format_to_n` with `std::back_insert_iterator` (#913). Thanks [\@DanielaE (Daniela Engert)](https://github.com/DanielaE). -* Fixed locale-dependent formatting ([\#905]()). +* 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 +* Fixed various compiler warnings and errors (#882, #886, #933, + #941, #931, #943, #954, #956, #962, #965, + #977, #983, #989). Thanks [\@Luthaf (Guillaume Fraux)](https://github.com/Luthaf), [\@stevenhoving (Steven Hoving)](https://github.com/stevenhoving), [\@christinaa (Kristina Brooks)](https://github.com/christinaa), [\@lgritz (Larry @@ -1092,16 +1093,16 @@ 5.2.1 - 2018-09-21 ================== -* Fixed `visit` lookup issues on gcc 7 & 8 ([\#870]()). Thanks +* Fixed `visit` lookup issues on gcc 7 & 8 (#870). Thanks [\@medithe](https://github.com/medithe). * Fixed linkage errors on older gcc. -* Prevented `fmt/range.h` from specializing `fmt::basic_string_view` ([\#865](), - [\#868]()). Thanks [\@hhggit (dual)](https://github.com/hhggit). -* Improved error message when formatting unknown types ([\#872]()). Thanks +* Prevented `fmt/range.h` from specializing `fmt::basic_string_view` (#865, + #868). Thanks [\@hhggit (dual)](https://github.com/hhggit). +* Improved error message when formatting unknown types (#872). Thanks [\@foonathan (Jonathan Müller)](https://github.com/foonathan), -* Disabled templated user-defined literals when compiled under nvcc ([\#875]()). +* Disabled templated user-defined literals when compiled under nvcc (#875). Thanks [\@CandyGumdrop (Candy Gumdrop)](https://github.com/CandyGumdrop), -* Fixed `format_to` formatting to `wmemory_buffer` ([\#874]()). +* Fixed `format_to` formatting to `wmemory_buffer` (#874). 5.2.0 - 2018-09-13 ================== @@ -1126,16 +1127,16 @@ enable it define the `FMT_STRING_ALIAS` macro to 1 before including `fmt/format.h`: - ``` {.c++} + ```c++ #define FMT_STRING_ALIAS 1 #include std::string answer = format(fmt("{}"), 42); ``` * Added compile-time format string checks to `format_to` overload that takes - `fmt::memory_buffer` ([\#783]()): + `fmt::memory_buffer` (#783): - ``` {.c++} + ```c++ fmt::memory_buffer buf; // Compile-time error: invalid type specifier. fmt::format_to(buf, fmt("{:d}"), "foo"); @@ -1148,7 +1149,7 @@ * Added formatting support for types explicitly convertible to `fmt::string_view`: - ``` {.c++} + ```c++ struct foo { explicit operator fmt::string_view() const { return "foo"; } }; @@ -1161,32 +1162,32 @@ function overloads with a single function template parameterized on the string type. -* Added support for dynamic argument lists ([\#814](), [\#819]()). Thanks +* Added support for dynamic argument lists (#814, #819). Thanks [\@MikePopoloski (Michael Popoloski)](https://github.com/MikePopoloski). * Reduced executable size overhead for embedded targets using newlib nano by - making locale dependency optional ([\#839]()). Thanks [\@teajay-fr (Thomas + making locale dependency optional (#839). Thanks [\@teajay-fr (Thomas Benard)](https://github.com/teajay-fr). -* Keep `noexcept` specifier when exceptions are disabled ([\#801](), [\#810]()). +* Keep `noexcept` specifier when exceptions are disabled (#801, #810). Thanks [\@qis (Alexej Harm)](https://github.com/qis). * Fixed formatting of user-defined types providing `operator<<` with - `format_to_n` ([\#806]()). Thanks [\@mkurdej (Marek + `format_to_n` (#806). Thanks [\@mkurdej (Marek Kurdej)](https://github.com/mkurdej). -* Fixed dynamic linkage of new symbols ([\#808]()). +* Fixed dynamic linkage of new symbols (#808). -* Fixed global initialization issue ([\#807]()): +* Fixed global initialization issue (#807): - ``` {.c++} + ```c++ // 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 +* Fixed various compiler warnings and errors (#804, #809, #811, + #822, #827, #830, #838, #843, #844, #851, + #852, #854). Thanks [\@henryiii (Henry Schreiner)](https://github.com/henryiii), [\@medithe](https://github.com/medithe), and [\@eliasdaler (Elias Daler)](https://github.com/eliasdaler). @@ -1197,7 +1198,7 @@ * Added experimental support for RGB color output enabled with the `FMT_EXTENDED_COLORS` macro: - ``` {.c++} + ```c++ #define FMT_EXTENDED_COLORS #define FMT_HEADER_ONLY // or compile fmt with FMT_EXTENDED_COLORS defined #include @@ -1206,45 +1207,45 @@ ``` The old API (the `print_colored` and `vprint_colored` functions and the - `color` enum) is now deprecated. ([\#762]() [\#767]()). thanks [\@Remotion + `color` enum) is now deprecated. (#762 #767). thanks [\@Remotion (Remo)](https://github.com/Remotion). -* Added quotes to strings in ranges and tuples ([\#766]()). Thanks [\@Remotion +* Added quotes to strings in ranges and tuples (#766). Thanks [\@Remotion (Remo)](https://github.com/Remotion). -* Made `format_to` work with `basic_memory_buffer` ([\#776]()). +* Made `format_to` work with `basic_memory_buffer` (#776). -* Added `vformat_to_n` and `wchar_t` overload of `format_to_n` ([\#764](), - [\#769]()). +* Added `vformat_to_n` and `wchar_t` overload of `format_to_n` (#764, + #769). * Made `is_range` and `is_tuple_like` part of public (experimental) API to allow - specialization for user-defined types ([\#751](), [\#759]()). Thanks [\@drrlvn + specialization for user-defined types (#751, #759). Thanks [\@drrlvn (Dror Levin)](https://github.com/drrlvn). * Added more compilers to continuous integration and increased `FMT_PEDANTIC` - warning levels ([\#736]()). Thanks [\@eliaskosunen (Elias + warning levels (#736). Thanks [\@eliaskosunen (Elias Kosunen)](https://github.com/eliaskosunen). * Fixed compilation with MSVC 2013. -* Fixed handling of user-defined types in `format_to` ([\#793]()). +* Fixed handling of user-defined types in `format_to` (#793). -* Forced linking of inline `vformat` functions into the library ([\#795]()). +* Forced linking of inline `vformat` functions into the library (#795). -* Fixed incorrect call to on\_align in `'{:}='` ([\#750]()). +* Fixed incorrect call to on\_align in `'{:}='` (#750). * Fixed floating-point formatting to a non-back\_insert\_iterator with sign & - numeric alignment specified ([\#756]()). + numeric alignment specified (#756). -* Fixed formatting to an array with `format_to_n` ([\#778]()). +* Fixed formatting to an array with `format_to_n` (#778). -* Fixed formatting of more than 15 named arguments ([\#754]()). +* Fixed formatting of more than 15 named arguments (#754). * Fixed handling of compile-time strings when including `fmt/ostream.h`. - ([\#768]()). + (#768). -* Fixed various compiler warnings and errors ([\#742](), [\#748](), [\#752](), - [\#770](), [\#775](), [\#779](), [\#780](), [\#790](), [\#792](), [\#800]()). +* Fixed various compiler warnings and errors (#742, #748, #752, + #770, #775, #779, #780, #790, #792, #800). Thanks [\@Remotion (Remo)](https://github.com/Remotion), [\@gabime (Gabi Melman)](https://github.com/gabime), [\@foonathan (Jonathan Müller)](https://github.com/foonathan), [\@Dark-Passenger (Dhruv @@ -1270,7 +1271,7 @@ checks](https://fmt.dev/dev/api.html#compile-time-format-string-checks). For example - ``` {.c++} + ```c++ #include std::string s = format(fmt("{:d}"), "foo"); @@ -1292,7 +1293,7 @@ * Separated format string parsing and formatting in the extension API to enable compile-time format string processing. For example - ``` {.c++} + ```c++ struct Answer {}; namespace fmt { @@ -1330,7 +1331,7 @@ * Added [iterator support](https://fmt.dev/dev/api.html#output-iterator-support): - ``` {.c++} + ```c++ #include #include @@ -1341,9 +1342,9 @@ * Added the [format\_to\_n](https://fmt.dev/dev/api.html#_CPPv2N3fmt11format_to_nE8OutputItNSt6size_tE11string_viewDpRK4Args) function that restricts the output to the specified number of characters - ([\#298]()): + (#298): - ``` {.c++} + ```c++ char out[4]; fmt::format_to_n(out, sizeof(out), "{}", 12345); // out == "1234" (without terminating '\0') @@ -1353,7 +1354,7 @@ [formatted\_size](https://fmt.dev/dev/api.html#_CPPv2N3fmt14formatted_sizeE11string_viewDpRK4Args) function for computing the output size: - ``` {.c++} + ```c++ #include auto size = fmt::formatted_size("{}", 12345); // size == 5 @@ -1362,7 +1363,7 @@ * Improved compile times by reducing dependencies on standard headers and providing a lightweight [core API](https://fmt.dev/dev/api.html#core-api): - ``` {.c++} + ```c++ #include fmt::print("The answer is {}.", 42); @@ -1375,7 +1376,7 @@ [make\_format\_args](https://fmt.dev/dev/api.html#_CPPv2N3fmt16make_format_argsEDpRK4Args) function for capturing formatting arguments: - ``` {.c++} + ```c++ // Prints formatted error message. void vreport_error(const char *format, fmt::format_args args) { fmt::print("Error: "); @@ -1388,13 +1389,13 @@ ``` * Added the `make_printf_args` function for capturing `printf` arguments - ([\#687](), [\#694]()). Thanks [\@Kronuz (Germán Méndez + (#687, #694). Thanks [\@Kronuz (Germán Méndez Bravo)](https://github.com/Kronuz). * Added prefix `v` to non-variadic functions taking `format_args` to distinguish them from variadic ones: - ``` {.c++} + ```c++ std::string vformat(string_view format_str, format_args args); template @@ -1402,9 +1403,9 @@ ``` * Added experimental support for formatting ranges, containers and tuple-like - types in `fmt/ranges.h` ([\#735]()): + types in `fmt/ranges.h` (#735): - ``` {.c++} + ```c++ #include std::vector v = {1, 2, 3}; @@ -1413,9 +1414,9 @@ Thanks [\@Remotion (Remo)](https://github.com/Remotion). -* Implemented `wchar_t` date and time formatting ([\#712]()): +* Implemented `wchar_t` date and time formatting (#712): - ``` {.c++} + ```c++ #include std::time_t t = std::time(nullptr); @@ -1424,16 +1425,16 @@ Thanks [\@DanielaE (Daniela Engert)](https://github.com/DanielaE). -* Provided more wide string overloads ([\#724]()). Thanks [\@DanielaE (Daniela +* Provided more wide string overloads (#724). Thanks [\@DanielaE (Daniela Engert)](https://github.com/DanielaE). * 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. -* Added support for `std::experimental::string_view` ([\#607]()): +* Added support for `std::experimental::string_view` (#607): - ``` {.c++} + ```c++ #include #include @@ -1445,7 +1446,7 @@ * Allowed mixing named and automatic arguments: - ``` {.c++} + ```c++ fmt::format("{} {two}", 1, fmt::arg("two", 2)); ``` @@ -1454,10 +1455,10 @@ format strings. * Disallowed formatting of multibyte strings into a wide character target - ([\#606]()). + (#606). -* Improved documentation ([\#515](), [\#614](), [\#617](), [\#661](), - [\#680]()). Thanks [\@ibell (Ian Bell)](https://github.com/ibell), +* Improved documentation (#515, #614, #617, #661, + #680). Thanks [\@ibell (Ian Bell)](https://github.com/ibell), [\@mihaitodor (Mihai Todor)](https://github.com/mihaitodor), and [\@johnthagen](https://github.com/johnthagen). @@ -1465,37 +1466,37 @@ * Introduced an inline namespace for symbol versioning. -* Added debug postfix `d` to the `fmt` library name ([\#636]()). +* Added debug postfix `d` to the `fmt` library name (#636). -* Removed unnecessary `fmt/` prefix in includes ([\#397]()). Thanks [\@chronoxor +* Removed unnecessary `fmt/` prefix in includes (#397). Thanks [\@chronoxor (Ivan Shynkarenka)](https://github.com/chronoxor). * 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. -* Added qmake project file `support/fmt.pro` ([\#641]()). Thanks [\@cowo78 +* Added qmake project file `support/fmt.pro` (#641). Thanks [\@cowo78 (Giuseppe Corbelli)](https://github.com/cowo78). -* Added Gradle build file `support/build.gradle` ([\#649]()). Thanks [\@luncliff +* Added Gradle build file `support/build.gradle` (#649). Thanks [\@luncliff (Park DongHa)](https://github.com/luncliff). * Removed `FMT_CPPFORMAT` CMake option. -* Fixed a name conflict with the macro `CHAR_WIDTH` in glibc ([\#616]()). Thanks +* Fixed a name conflict with the macro `CHAR_WIDTH` in glibc (#616). Thanks [\@aroig (Abdó Roig-Maranges)](https://github.com/aroig). -* Fixed handling of nested braces in `fmt::join` ([\#638]()). +* Fixed handling of nested braces in `fmt::join` (#638). -* Added `SOURCELINK_SUFFIX` for compatibility with Sphinx 1.5 ([\#497]()). +* Added `SOURCELINK_SUFFIX` for compatibility with Sphinx 1.5 (#497). Thanks [\@ginggs (Graham Inggs)](https://github.com/ginggs). -* Added a missing `inline` in the header-only mode ([\#626]()). Thanks [\@aroig +* Added a missing `inline` in the header-only mode (#626). Thanks [\@aroig (Abdó Roig-Maranges)](https://github.com/aroig). -* Fixed various compiler warnings ([\#640](), [\#656](), [\#679](), [\#681](), - [\#705]{.title-ref}\_\_, [\#715](), [\#717](), [\#720](), [\#723](), - [\#726](), [\#730](), [\#739]()). Thanks +* Fixed various compiler warnings (#640, #656, #679, #681, + [\#705]{.title-ref}\_\_, #715, #717, #720, #723, + #726, #730, #739). Thanks [\@peterbell10](https://github.com/peterbell10), [\@LarsGullik](https://github.com/LarsGullik), [\@foonathan (Jonathan Müller)](https://github.com/foonathan), [\@eliaskosunen (Elias @@ -1504,83 +1505,83 @@ Engert)](https://github.com/DanielaE), and [\@mwinterb](https://github.com/mwinterb). -* Worked around an MSVC bug and fixed several warnings ([\#653]()). Thanks +* Worked around an MSVC bug and fixed several warnings (#653). Thanks [\@alabuzhev (Alex Alabuzhev)](https://github.com/alabuzhev). -* Worked around GCC bug 67371 ([\#682]()). +* Worked around GCC bug 67371 (#682). -* Fixed compilation with `-fno-exceptions` ([\#655]()). Thanks [\@chenxiaolong +* Fixed compilation with `-fno-exceptions` (#655). Thanks [\@chenxiaolong (Andrew Gunnerson)](https://github.com/chenxiaolong). -* Made `constexpr remove_prefix` gcc version check tighter ([\#648]()). +* Made `constexpr remove_prefix` gcc version check tighter (#648). * Renamed internal type enum constants to prevent collision with poorly written - C libraries ([\#644]()). + C libraries (#644). -* Added detection of `wostream operator<<` ([\#650]()). +* Added detection of `wostream operator<<` (#650). -* Fixed compilation on OpenBSD ([\#660]()). Thanks +* Fixed compilation on OpenBSD (#660). Thanks [\@hubslave](https://github.com/hubslave). -* Fixed compilation on FreeBSD 12 ([\#732]()). Thanks +* Fixed compilation on FreeBSD 12 (#732). Thanks [\@dankm](https://github.com/dankm). * Fixed compilation when there is a mismatch between `-std` options between the - library and user code ([\#664]()). + library and user code (#664). -* Fixed compilation with GCC 7 and `-std=c++11` ([\#734]()). +* Fixed compilation with GCC 7 and `-std=c++11` (#734). -* Improved generated binary code on GCC 7 and older ([\#668]()). +* Improved generated binary code on GCC 7 and older (#668). -* Fixed handling of numeric alignment with no width ([\#675]()). +* Fixed handling of numeric alignment with no width (#675). -* Fixed handling of empty strings in UTF8/16 converters ([\#676]()). Thanks +* Fixed handling of empty strings in UTF8/16 converters (#676). Thanks [\@vgalka-sl (Vasili Galka)](https://github.com/vgalka-sl). -* Fixed formatting of an empty `string_view` ([\#689]()). +* Fixed formatting of an empty `string_view` (#689). -* Fixed detection of `string_view` on libc++ ([\#686]()). +* Fixed detection of `string_view` on libc++ (#686). -* Fixed DLL issues ([\#696]()). Thanks +* Fixed DLL issues (#696). Thanks [\@sebkoenig](https://github.com/sebkoenig). -* Fixed compile checks for mixing narrow and wide strings ([\#690]()). +* Fixed compile checks for mixing narrow and wide strings (#690). -* Disabled unsafe implicit conversion to `std::string` ([\#729]()). +* Disabled unsafe implicit conversion to `std::string` (#729). * Fixed handling of reused format specs (as in `fmt::join`) for pointers - ([\#725]()). Thanks [\@mwinterb](https://github.com/mwinterb). + (#725). Thanks [\@mwinterb](https://github.com/mwinterb). -* Fixed installation of `fmt/ranges.h` ([\#738]()). Thanks +* Fixed installation of `fmt/ranges.h` (#738). Thanks [\@sv1990](https://github.com/sv1990). 4.1.0 - 2017-12-20 ================== -* Added `fmt::to_wstring()` in addition to `fmt::to_string()` ([\#559]()). +* Added `fmt::to_wstring()` in addition to `fmt::to_string()` (#559). Thanks [\@alabuzhev (Alex Alabuzhev)](https://github.com/alabuzhev). -* Added support for C++17 `std::string_view` ([\#571]() and [\#578]()). Thanks +* Added support for C++17 `std::string_view` (#571 and #578). Thanks [\@thelostt (Mário Feroldi)](https://github.com/thelostt) and [\@mwinterb](https://github.com/mwinterb). -* Enabled stream exceptions to catch errors ([\#581]()). Thanks +* Enabled stream exceptions to catch errors (#581). Thanks [\@crusader-mike](https://github.com/crusader-mike). -* Allowed formatting of class hierarchies with `fmt::format_arg()` ([\#547]()). +* Allowed formatting of class hierarchies with `fmt::format_arg()` (#547). Thanks [\@rollbear (Björn Fahller)](https://github.com/rollbear). -* Removed limitations on character types ([\#563]()). Thanks [\@Yelnats321 +* Removed limitations on character types (#563). Thanks [\@Yelnats321 (Elnar Dakeshov)](https://github.com/Yelnats321). -* Conditionally enabled use of `std::allocator_traits` ([\#583]()). Thanks +* Conditionally enabled use of `std::allocator_traits` (#583). Thanks [\@mwinterb](https://github.com/mwinterb). * Added support for `const` variadic member function emulation with - `FMT_VARIADIC_CONST` ([\#591]()). Thanks [\@ludekvodicka (Ludek + `FMT_VARIADIC_CONST` (#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]()), ill-formed - macros ([\#542]()) and ambiguous overloads ([\#580]()). Thanks [\@xylosper + when determining formatting function, test segfaults (#551), ill-formed + macros (#542) and ambiguous overloads (#580). Thanks [\@xylosper (Byoung-young Lee)](https://github.com/xylosper). -* Prevented warnings on MSVC ([\#605](), [\#602](), and [\#545]()), clang - ([\#582]()), GCC ([\#573]()), various conversion warnings ([\#609](), - [\#567](), [\#553]() and [\#553]()), and added `override` and `[[noreturn]]` - ([\#549]() and [\#555]()). Thanks [\@alabuzhev (Alex +* Prevented warnings on MSVC (#605, #602, and #545), clang + (#582), GCC (#573), various conversion warnings (#609, + #567, #553 and #553), and added `override` and `[[noreturn]]` + (#549 and #555). Thanks [\@alabuzhev (Alex Alabuzhev)](https://github.com/alabuzhev), [\@virgiliofornazin (Virgilio Alexandre Fornazin)](https://gihtub.com/virgiliofornazin), [\@alexanderbock (Alexander Bock)](https://github.com/alexanderbock), @@ -1589,8 +1590,8 @@ Cimalando)](https://github.com/jpcima), [\@thelostt (Mário Feroldi)](https://github.com/thelostt), and [\@Manu343726 (Manu Sánchez)](https://github.com/Manu343726). -* Improved CMake: Used `GNUInstallDirs` to set installation location ([\#610]()) - and fixed warnings ([\#536]() and [\#556]()). Thanks [\@mikecrowe (Mike +* Improved CMake: Used `GNUInstallDirs` to set installation location (#610) + and fixed warnings (#536 and #556). Thanks [\@mikecrowe (Mike Crowe)](https://github.com/mikecrowe), [\@evgen231](https://github.com/evgen231) and [\@henryiii (Henry Schreiner)](https://github.com/henryiii). @@ -1599,14 +1600,14 @@ ================== * Removed old compatibility headers `cppformat/*.h` and CMake options - ([\#527]()). Thanks [\@maddinat0r (Alex + (#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]() and - [\#441]()): + `std::to_string()` as well as other string writer functionality (#326 and + #441): - ``` {.c++} + ```c++ #include "fmt/string.h" std::string answer = fmt::to_string(42); @@ -1615,11 +1616,11 @@ 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]()), made `%.f` more conformant to regular `printf()` - ([\#490]()), added custom writer support ([\#476]()) and implemented missing - custom argument formatting ([\#339]() and [\#340]()): + specifier (#453), made `%.f` more conformant to regular `printf()` + (#490), added custom writer support (#476) and implemented missing + custom argument formatting (#339 and #340): - ``` {.c++} + ```c++ #include "fmt/printf.h" // %s format specifier can be used with any argument type. @@ -1628,17 +1629,17 @@ Thanks [\@mojoBrendan](https://github.com/mojoBrendan), [\@manylegged (Arthur Danskin)](https://github.com/manylegged) and [\@spacemoose (Glen - Stark)](https://github.com/spacemoose). See also [\#360](), [\#335]() and - [\#331](). + Stark)](https://github.com/spacemoose). See also #360, #335 and + #331. * Added `container.h` containing a `BasicContainerWriter` to write to containers - like `std::vector` ([\#450]()). Thanks [\@polyvertex (Jean-Charles + like `std::vector` (#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]()): + separated by a given string (#466): - ``` {.c++} + ```c++ #include "fmt/format.h" std::vector v = {1.2, 3.4, 5.6}; @@ -1649,107 +1650,107 @@ Thanks [\@olivier80](https://github.com/olivier80). * Added support for custom formatting specifications to simplify customization - of built-in formatting ([\#444]()). Thanks [\@polyvertex (Jean-Charles - Lefebvre)](https://github.com/polyvertex). See also [\#439](). + of built-in formatting (#444). Thanks [\@polyvertex (Jean-Charles + Lefebvre)](https://github.com/polyvertex). See also #439. -* Added `fmt::format_system_error()` for error code formatting ([\#323]() and - [\#526]()). Thanks [\@maddinat0r (Alex +* Added `fmt::format_system_error()` for error code formatting (#323 and + #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]()). Thanks + the standard version to `time.h` (#396). Thanks [\@codicodi](https://github.com/codicodi). -* Internal improvements to `NamedArg` and `ArgLists` ([\#389]() and [\#390]()). +* Internal improvements to `NamedArg` and `ArgLists` (#389 and #390). Thanks [\@chronoxor](https://github.com/chronoxor). -* Fixed crash due to bug in `FormatBuf` ([\#493]()). Thanks - [\@effzeh](https://github.com/effzeh). See also [\#480]() and [\#491](). +* Fixed crash due to bug in `FormatBuf` (#493). Thanks + [\@effzeh](https://github.com/effzeh). See also #480 and #491. * Fixed handling of wide strings in `fmt::StringWriter`. -* Improved compiler error messages ([\#357]()). +* Improved compiler error messages (#357). -* Fixed various warnings and issues with various compilers ([\#494](), - [\#499](), [\#483](), [\#485](), [\#482](), [\#475](), [\#473]() and - [\#414]()). Thanks [\@chronoxor](https://github.com/chronoxor), +* Fixed various warnings and issues with various compilers (#494, + #499, #483, #485, #482, #475, #473 and + #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]() and [\#513]()), added - support for header-only `printf.h` ([\#354]()), fixed issue with minimal - supported library subset ([\#418](), [\#419]() and [\#420]()). Thanks +* Improved CMake: targets are now namespaced (#511 and #513), added + support for header-only `printf.h` (#354), fixed issue with minimal + supported library subset (#418, #419 and #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](). + (Phil)](https://github.com/pwm1234) for #393. 3.0.2 - 2017-06-14 ================== -* Added `FMT_VERSION` macro ([\#411]()). -* Used `FMT_NULL` instead of literal `0` ([\#409]()). Thanks [\@alabuzhev (Alex +* Added `FMT_VERSION` macro (#411). +* Used `FMT_NULL` instead of literal `0` (#409). Thanks [\@alabuzhev (Alex Alabuzhev)](https://github.com/alabuzhev). -* Added extern templates for `format_float` ([\#413]()). -* Fixed implicit conversion issue ([\#507]()). -* Fixed signbit detection ([\#423]()). -* Fixed naming collision ([\#425]()). -* Fixed missing intrinsic for C++/CLI ([\#457]()). Thanks [\@calumr (Calum +* Added extern templates for `format_float` (#413). +* Fixed implicit conversion issue (#507). +* Fixed signbit detection (#423). +* Fixed naming collision (#425). +* Fixed missing intrinsic for C++/CLI (#457). Thanks [\@calumr (Calum Robinson)](https://github.com/calumr) -* Fixed Android detection ([\#458]()). Thanks [\@Gachapen (Magnus Bjerke +* Fixed Android detection (#458). Thanks [\@Gachapen (Magnus Bjerke Vik)](https://github.com/Gachapen). -* Use lean `windows.h` if not in header-only mode ([\#503]()). Thanks +* Use lean `windows.h` if not in header-only mode (#503). Thanks [\@Quentin01 (Quentin Buathier)](https://github.com/Quentin01). -* Fixed issue with CMake exporting C++11 flag ([\#445]()). Thanks [\@EricWF +* Fixed issue with CMake exporting C++11 flag (#445). Thanks [\@EricWF (Eric)](https://github.com/EricWF). -* Fixed issue with nvcc and MSVC compiler bug and MinGW ([\#505]()). -* Fixed DLL issues ([\#469]() and [\#502]()). Thanks [\@richardeakin (Richard +* Fixed issue with nvcc and MSVC compiler bug and MinGW (#505). +* Fixed DLL issues (#469 and #502). Thanks [\@richardeakin (Richard Eakin)](https://github.com/richardeakin) and [\@AndreasSchoenle (Andreas Schönle)](https://github.com/AndreasSchoenle). -* Fixed test compilation under FreeBSD ([\#433]()). -* Fixed various warnings ([\#403](), [\#410]() and [\#510]()). Thanks +* Fixed test compilation under FreeBSD (#433). +* Fixed various warnings (#403, #410 and #510). Thanks [\@Lecetem](https://github.com/Lectem), [\@chenhayat (Chen Hayat)](https://github.com/chenhayat) and [\@trozen](https://github.com/trozen). -* Worked around a broken `__builtin_clz` in clang with MS codegen ([\#519]()). -* Removed redundant include ([\#479]()). +* Worked around a broken `__builtin_clz` in clang with MS codegen (#519). +* Removed redundant include (#479). * Fixed documentation issues. 3.0.1 - 2016-11-01 ================== -* Fixed handling of thousands separator ([\#353]()). -* Fixed handling of `unsigned char` strings ([\#373]()). -* Corrected buffer growth when formatting time ([\#367]()). -* Removed warnings under MSVC and clang ([\#318](), [\#250](), also merged - [\#385]() and [\#361]()). Thanks [\@jcelerier (Jean-Michaël +* Fixed handling of thousands separator (#353). +* Fixed handling of `unsigned char` strings (#373). +* Corrected buffer growth when formatting time (#367). +* Removed warnings under MSVC and clang (#318, #250, also merged + #385 and #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](), [\#345]() and [\#381]()), - FreeBSD ([\#358]()), Cygwin ([\#388]()), MinGW ([\#355]()) as well as other - issues ([\#350](), [\#366](), [\#348](), [\#402](), [\#405]()). Thanks to +* Fixed compilation issues under Android (#327, #345 and #381), + FreeBSD (#358), Cygwin (#388), MinGW (#355) as well as other + issues (#350, #366, #348, #402, #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](), - [\#333](), [\#347](), [\#362]()). Thanks to [\@smellman (Taro Matsuzawa aka. +* Fixed some documentation issues and extended specification (#320, + #333, #347, #362). Thanks to [\@smellman (Taro Matsuzawa aka. btm)](https://github.com/smellman). 3.0.0 - 2016-05-07 ================== * The project has been renamed from C++ Format (cppformat) to fmt for - consistency with the used namespace and macro prefix ([\#307]()). Library + consistency with the used namespace and macro prefix (#307). Library headers are now located in the `fmt` directory: - ``` {.c++} + ```c++ #include "fmt/format.h" ``` @@ -1761,9 +1762,9 @@ * Added support for [strftime](http://en.cppreference.com/w/cpp/chrono/c/strftime)-like [date and time formatting](https://fmt.dev/3.0.0/api.html#date-and-time-formatting) - ([\#283]()): + (#283): - ``` {.c++} + ```c++ #include "fmt/time.h" std::time_t t = std::time(nullptr); @@ -1774,7 +1775,7 @@ * `std::ostream` support including formatting of user-defined types that provide overloaded `operator<<` has been moved to `fmt/ostream.h`: - ``` {.c++} + ```c++ #include "fmt/ostream.h" class Date { @@ -1793,42 +1794,42 @@ ``` * Added support for [custom argument - formatters](https://fmt.dev/3.0.0/api.html#argument-formatters) ([\#235]()). + formatters](https://fmt.dev/3.0.0/api.html#argument-formatters) (#235). * Added support for locale-specific integer formatting with the `n` specifier - ([\#305]()): + (#305): - ``` {.c++} + ```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]()): + format specifier (#265): - ``` {.c++} + ```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 functions - and the correct type is determined automatically ([\#255]()): + and the correct type is determined automatically (#255): - ``` {.c++} + ```c++ fmt::printf("%d", std::numeric_limits::max()); ``` Note that it would be an undefined behavior in `std::printf`. -* Added initial support for custom formatters ([\#231]()). +* Added initial support for custom formatters (#231). * Fixed detection of user-defined literal support on Intel C++ compiler - ([\#311](), [\#312]()). Thanks to [\@dean0x7d (Dean + (#311, #312). Thanks to [\@dean0x7d (Dean Moldovan)](https://github.com/dean0x7d) and [\@speth (Ray Speth)](https://github.com/speth). -* Reduced compile time ([\#243](), [\#249](), [\#317]()): +* Reduced compile time (#243, #249, #317): ![image](https://cloud.githubusercontent.com/assets/4831417/11614060/%0Ab9e826d2-9c36-11e5-8666-d4131bf503ef.png) @@ -1836,46 +1837,46 @@ Thanks to [\@dean0x7d (Dean Moldovan)](https://github.com/dean0x7d). -* Compile test fixes ([\#313]()). Thanks to [\@dean0x7d (Dean +* Compile test fixes (#313). Thanks to [\@dean0x7d (Dean Moldovan)](https://github.com/dean0x7d). -* Documentation fixes ([\#239](), [\#248](), [\#252](), [\#258](), [\#260](), - [\#301](), [\#309]()). Thanks to +* Documentation fixes (#239, #248, #252, #258, #260, + #301, #309). Thanks to [\@ReadmeCritic](https://github.com/ReadmeCritic) [\@Gachapen (Magnus Bjerke Vik)](https://github.com/Gachapen) and [\@jwilk (Jakub Wilk)](https://github.com/jwilk). -* Fixed compiler and sanitizer warnings ([\#244](), [\#256](), [\#259](), - [\#263](), [\#274](), [\#277](), [\#286](), [\#291](), [\#296](), [\#308]()) +* Fixed compiler and sanitizer warnings (#244, #256, #259, + #263, #274, #277, #286, #291, #296, #308) 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](), [\#285]()). Thanks +* Improved compatibility with Windows Store apps (#280, #285). Thanks to [\@mwinterb](https://github.com/mwinterb). -* Added tests of compatibility with older C++ standards ([\#273]()). Thanks to +* Added tests of compatibility with older C++ standards (#273). Thanks to [\@niosHD](https://github.com/niosHD). -* Fixed Android build ([\#271]()). Thanks to +* Fixed Android build (#271). Thanks to [\@newnon](https://github.com/newnon). -* Changed `ArgMap` to be backed by a vector instead of a map. ([\#261](), - [\#262]()). Thanks to [\@mwinterb](https://github.com/mwinterb). +* Changed `ArgMap` to be backed by a vector instead of a map. (#261, + #262). Thanks to [\@mwinterb](https://github.com/mwinterb). -* Added `fprintf` overload that writes to a `std::ostream` ([\#251]()). Thanks +* Added `fprintf` overload that writes to a `std::ostream` (#251). Thanks to [nickhutchinson (Nicholas Hutchinson)](https://github.com/nickhutchinson). -* Export symbols when building a Windows DLL ([\#245]()). Thanks to [macdems +* Export symbols when building a Windows DLL (#245). Thanks to [macdems (Maciek Dems)](https://github.com/macdems). -* Fixed compilation on Cygwin ([\#304]()). +* Fixed compilation on Cygwin (#304). * Implemented a workaround for a bug in Apple LLVM version 4.2 of clang - ([\#276]()). + (#276). * Implemented a workaround for Google Test bug - [\#705](https://github.com/google/googletest/issues/705) on gcc 6 ([\#268]()). + [\#705](https://github.com/google/googletest/issues/705) on gcc 6 (#268). Thanks to [octoploid](https://github.com/octoploid). * Removed Biicode support because the latter has been discontinued. @@ -1884,14 +1885,14 @@ ================== * The install location for generated CMake files is now configurable via the - `FMT_CMAKE_DIR` CMake variable ([\#299]()). Thanks to + `FMT_CMAKE_DIR` CMake variable (#299). Thanks to [\@niosHD](https://github.com/niosHD). -* Documentation fixes ([\#252]()). +* Documentation fixes (#252). 2.1.0 - 2016-03-21 ================== -* Project layout and build system improvements ([\#267]()): +* Project layout and build system improvements (#267): * The code have been moved to the `cppformat` directory. Including `format.h` from the top-level directory is deprecated but works via a @@ -1908,11 +1909,11 @@ 2.0.1 - 2016-03-13 ================== -* Improved CMake find and package support ([\#264]()). Thanks to +* Improved CMake find and package support (#264). Thanks to [\@niosHD](https://github.com/niosHD). -* Fix compile error with Android NDK and mingw32 ([\#241]()). Thanks to +* Fix compile error with Android NDK and mingw32 (#241). Thanks to [\@Gachapen (Magnus Bjerke Vik)](https://github.com/Gachapen). -* Documentation fixes ([\#248](), [\#260]()). +* Documentation fixes (#248, #260). 2.0.0 - 2015-12-01 ================== @@ -1920,18 +1921,18 @@ General ------- -* \[Breaking\] Named arguments ([\#169](), [\#173](), [\#174]()): +* \[Breaking\] Named arguments (#169, #173, #174): - ``` {.c++} + ```c++ fmt::print("The answer is {answer}.", fmt::arg("answer", 42)); ``` Thanks to [\@jamboree](https://github.com/jamboree). * \[Experimental\] User-defined literals for format and named arguments - ([\#204](), [\#206](), [\#207]()): + (#204, #206, #207): - ``` {.c++} + ```c++ using namespace fmt::literals; fmt::print("The answer is {answer}.", "answer"_a=42); ``` @@ -1939,73 +1940,73 @@ General Thanks to [\@dean0x7d (Dean Moldovan)](https://github.com/dean0x7d). * \[Breaking\] Formatting of more than 16 arguments is now supported when using - variadic templates ([\#141]()). Thanks to + variadic templates (#141). Thanks to [\@Shauren](https://github.com/Shauren). -* Runtime width specification ([\#168]()): +* Runtime width specification (#168): - ``` {.c++} + ```c++ fmt::format("{0:{1}}", 42, 5); // gives " 42" ``` Thanks to [\@jamboree](https://github.com/jamboree). * \[Breaking\] Enums are now formatted with an overloaded `std::ostream` - insertion operator (`operator<<`) if available ([\#232]()). + insertion operator (`operator<<`) if available (#232). * \[Breaking\] Changed default `bool` format to textual, \"true\" or \"false\" - ([\#170]()): + (#170): - ``` {.c++} + ```c++ fmt::print("{}", true); // prints "true" ``` To print `bool` as a number use numeric format specifier such as `d`: - ``` {.c++} + ```c++ fmt::print("{:d}", true); // prints "1" ``` * `fmt::printf` and `fmt::sprintf` now support formatting of `bool` with the - `%s` specifier giving textual output, \"true\" or \"false\" ([\#223]()): + `%s` specifier giving textual output, \"true\" or \"false\" (#223): - ``` {.c++} + ```c++ fmt::printf("%s", true); // prints "true" ``` Thanks to [\@LarsGullik](https://github.com/LarsGullik). * \[Breaking\] `signed char` and `unsigned char` are now formatted as integers - by default ([\#217]()). + by default (#217). * \[Breaking\] Pointers to C strings can now be formatted with the `p` specifier - ([\#223]()): + (#223): - ``` {.c++} + ```c++ fmt::print("{:p}", "test"); // prints pointer value ``` Thanks to [\@LarsGullik](https://github.com/LarsGullik). * \[Breaking\] `fmt::printf` and `fmt::sprintf` now print null pointers as - `(nil)` and null strings as `(null)` for consistency with glibc ([\#226]()). + `(nil)` and null strings as `(null)` for consistency with glibc (#226). Thanks to [\@LarsGullik](https://github.com/LarsGullik). * \[Breaking\] `fmt::(s)printf` now supports formatting of objects of user-defined types that provide an overloaded `std::ostream` insertion - operator (`operator<<`) ([\#201]()): + operator (`operator<<`) (#201): - ``` {.c++} + ```c++ fmt::printf("The date is %s", Date(2012, 12, 9)); ``` * \[Breaking\] The `Buffer` template is now part of the public API and can be - used to implement custom memory buffers ([\#140]()). Thanks to [\@polyvertex + used to implement custom memory buffers (#140). Thanks to [\@polyvertex (Jean-Charles Lefebvre)](https://github.com/polyvertex). * \[Breaking\] Improved compatibility between `BasicStringRef` and [std::experimental::basic\_string\_view](http://en.cppreference.com/w/cpp/experimental/basic_string_view) - ([\#100](), [\#159](), [\#183]()): + (#100, #159, #183): * Comparison operators now compare string content, not pointers * `BasicStringRef::c_str` replaced by `BasicStringRef::data` @@ -2014,31 +2015,31 @@ General References to null-terminated strings are now represented by a new class, `BasicCStringRef`. -* Dependency on pthreads introduced by Google Test is now optional ([\#185]()). +* Dependency on pthreads introduced by Google Test is now optional (#185). * New CMake options `FMT_DOC`, `FMT_INSTALL` and `FMT_TEST` to control generation of `doc`, `install` and `test` targets respectively, on by default - ([\#197](), [\#198](), [\#200]()). Thanks to [\@maddinat0r (Alex + (#197, #198, #200). Thanks to [\@maddinat0r (Alex Martin)](https://github.com/maddinat0r). -* `noexcept` is now used when compiling with MSVC2015 ([\#215]()). Thanks to +* `noexcept` is now used when compiling with MSVC2015 (#215). Thanks to [\@dmkrepo (Dmitriy)](https://github.com/dmkrepo). * Added an option to disable use of `windows.h` when `FMT_USE_WINDOWS_H` is - defined as 0 before including `format.h` ([\#171]()). Thanks to [\@alfps + defined as 0 before including `format.h` (#171). Thanks to [\@alfps (Alf P. Steinbach)](https://github.com/alfps). * \[Breaking\] `windows.h` is now included with `NOMINMAX` unless `FMT_WIN_MINMAX` is defined. This is done to prevent breaking code using `std::min` and `std::max` and only affects the header-only configuration - ([\#152](), [\#153](), [\#154]()). Thanks to + (#152, #153, #154). Thanks to [\@DevO2012](https://github.com/DevO2012). -* Improved support for custom character types ([\#171]()). Thanks to [\@alfps +* Improved support for custom character types (#171). Thanks to [\@alfps (Alf P. Steinbach)](https://github.com/alfps). * Added an option to disable use of IOStreams when `FMT_USE_IOSTREAMS` is - defined as 0 before including `format.h` ([\#205](), [\#208]()). Thanks to + defined as 0 before including `format.h` (#205, #208). Thanks to [\@JodiTheTigger](https://github.com/JodiTheTigger). * Improved detection of `isnan`, `isinf` and `signbit`. @@ -2047,32 +2048,32 @@ Optimization ------------ * Made formatting of user-defined types more efficient with a custom stream - buffer ([\#92](), [\#230]()). Thanks to + buffer (#92, #230). Thanks to [\@NotImplemented](https://github.com/NotImplemented). * Further improved performance of `fmt::Writer` on integer formatting and fixed a minor regression. Now it is \~7% faster than `karma::generate` on Karma\'s - benchmark ([\#186]()). + benchmark (#186). * \[Breaking\] Reduced [compiled code - size](https://github.com/fmtlib/fmt#compile-time-and-code-bloat) ([\#143](), - [\#149]()). + size](https://github.com/fmtlib/fmt#compile-time-and-code-bloat) (#143, + #149). Distribution ------------ * \[Breaking\] Headers are now installed in - `${CMAKE_INSTALL_PREFIX}/include/cppformat` ([\#178]()). Thanks to [\@jackyf + `${CMAKE_INSTALL_PREFIX}/include/cppformat` (#178). Thanks to [\@jackyf (Eugene V. Lyubimkin)](https://github.com/jackyf). * \[Breaking\] Changed the library name from `format` to `cppformat` for consistency with the project name and to avoid potential conflicts - ([\#178]()). Thanks to [\@jackyf (Eugene V. + (#178). Thanks to [\@jackyf (Eugene V. Lyubimkin)](https://github.com/jackyf). * C++ Format is now available in [Debian](https://www.debian.org/) GNU/Linux ([stretch](https://packages.debian.org/source/stretch/cppformat), [sid](https://packages.debian.org/source/sid/cppformat)) and derived distributions such as [Ubuntu](https://launchpad.net/ubuntu/+source/cppformat) - 15.10 and later ([\#155]()): + 15.10 and later (#155): $ sudo apt-get install libcppformat1-dev @@ -2083,7 +2084,7 @@ Distribution available. Thanks to Dave Johansen. * C++ Format can now be installed via [Homebrew](http://brew.sh/) on OS X - ([\#157]()): + (#157): $ brew install cppformat @@ -2093,58 +2094,58 @@ Documentation ------------- * Migrated from ReadTheDocs to GitHub Pages for better responsiveness and - reliability ([\#128]()). New documentation address is + reliability (#128). New documentation address is . * Added [Building the documentation](https://fmt.dev/2.0.0/usage.html#building-the-documentation) section to the documentation. * Documentation build script is now compatible with Python 3 and newer pip - versions ([\#189](), [\#209]()). Thanks to + versions (#189, #209). Thanks to [\@JodiTheTigger](https://github.com/JodiTheTigger) and [\@xentec](https://github.com/xentec). -* Documentation fixes and improvements ([\#36](), [\#75](), [\#125](), - [\#160](), [\#161](), [\#162](), [\#165](), [\#210]()). Thanks to [\@syohex +* Documentation fixes and improvements (#36, #75, #125, + #160, #161, #162, #165, #210). Thanks to [\@syohex (Syohei YOSHIDA)](https://github.com/syohex) and bug reporters. -* Fixed out-of-tree documentation build ([\#177]()). Thanks to [\@jackyf +* Fixed out-of-tree documentation build (#177). Thanks to [\@jackyf (Eugene V. Lyubimkin)](https://github.com/jackyf). Fixes ----- -* Fixed `initializer_list` detection ([\#136]()). Thanks to [\@Gachapen (Magnus +* Fixed `initializer_list` detection (#136). Thanks to [\@Gachapen (Magnus Bjerke Vik)](https://github.com/Gachapen). * \[Breaking\] Fixed formatting of enums with numeric format specifiers in - `fmt::(s)printf` ([\#131](), [\#139]()): + `fmt::(s)printf` (#131, #139): - ``` {.c++} + ```c++ enum { ANSWER = 42 }; fmt::printf("%d", ANSWER); ``` Thanks to [\@Naios](https://github.com/Naios). -* Improved compatibility with old versions of MinGW ([\#129](), [\#130](), - [\#132]()). Thanks to [\@cstamford (Christopher +* Improved compatibility with old versions of MinGW (#129, #130, + #132). Thanks to [\@cstamford (Christopher Stamford)](https://github.com/cstamford). -* Fixed a compile error on MSVC with disabled exceptions ([\#144]()). +* Fixed a compile error on MSVC with disabled exceptions (#144). * Added a workaround for broken implementation of variadic templates in MSVC2012 - ([\#148]()). + (#148). * Placed the anonymous namespace within `fmt` namespace for the header-only - configuration ([\#171]()). Thanks to [\@alfps (Alf P. + configuration (#171). Thanks to [\@alfps (Alf P. Steinbach)](https://github.com/alfps). -* Fixed issues reported by Coverity Scan ([\#187](), [\#192]()). +* Fixed issues reported by Coverity Scan (#187, #192). -* Implemented a workaround for a name lookup bug in MSVC2010 ([\#188]()). +* Implemented a workaround for a name lookup bug in MSVC2010 (#188). -* Fixed compiler warnings ([\#95](), [\#96](), [\#114](), [\#135](), [\#142](), - [\#145](), [\#146](), [\#158](), [\#163](), [\#175](), [\#190](), [\#191](), - [\#194](), [\#196](), [\#216](), [\#218](), [\#220](), [\#229](), [\#233](), - [\#234](), [\#236](), [\#281](), [\#289]()). Thanks to [\@seanmiddleditch +* Fixed compiler warnings (#95, #96, #114, #135, #142, + #145, #146, #158, #163, #175, #190, #191, + #194, #196, #216, #218, #220, #229, #233, + #234, #236, #281, #289). Thanks to [\@seanmiddleditch (Sean Middleditch)](https://github.com/seanmiddleditch), [\@dixlorenz (Dix Lorenz)](https://github.com/dixlorenz), [\@CarterLi (李通洲)](https://github.com/CarterLi), [\@Naios](https://github.com/Naios), @@ -2159,37 +2160,37 @@ Fixes (Johan)](https://github.com/Jopie64). * Fixed portability issues (mostly causing test failures) on ARM, ppc64, - ppc64le, s390x and SunOS 5.11 i386 ([\#138](), [\#179](), [\#180](), - [\#202](), [\#225](), [Red Hat Bugzilla Bug + ppc64le, s390x and SunOS 5.11 i386 (#138, #179, #180, + #202, #225, [Red Hat Bugzilla Bug 1260297](https://bugzilla.redhat.com/show_bug.cgi?id=1260297)). Thanks to [\@Naios](https://github.com/Naios), [\@jackyf (Eugene V. Lyubimkin)](https://github.com/jackyf) and Dave Johansen. * Fixed a name conflict with macro `free` defined in `crtdbg.h` when - `_CRTDBG_MAP_ALLOC` is set ([\#211]()). + `_CRTDBG_MAP_ALLOC` is set (#211). -* Fixed shared library build on OS X ([\#212]()). Thanks to [\@dean0x7d (Dean +* Fixed shared library build on OS X (#212). Thanks to [\@dean0x7d (Dean Moldovan)](https://github.com/dean0x7d). * Fixed an overload conflict on MSVC when `/Zc:wchar_t-` option is specified - ([\#214]()). Thanks to [\@slavanap (Vyacheslav + (#214). Thanks to [\@slavanap (Vyacheslav Napadovsky)](https://github.com/slavanap). -* Improved compatibility with MSVC 2008 ([\#236]()). Thanks to [\@Jopie64 +* Improved compatibility with MSVC 2008 (#236). Thanks to [\@Jopie64 (Johan)](https://github.com/Jopie64). -* Improved compatibility with bcc32 ([\#227]()). +* Improved compatibility with bcc32 (#227). -* Fixed `static_assert` detection on Clang ([\#228]()). Thanks to [\@dean0x7d +* Fixed `static_assert` detection on Clang (#228). Thanks to [\@dean0x7d (Dean Moldovan)](https://github.com/dean0x7d). 1.1.0 - 2015-03-06 ================== * Added `BasicArrayWriter`, a class template that provides operations for - formatting and writing data into a fixed-size array ([\#105]() and [\#122]()): + formatting and writing data into a fixed-size array (#105 and #122): - ``` {.c++} + ```c++ char buffer[100]; fmt::ArrayWriter w(buffer); w.write("The answer is {}", 42); @@ -2200,22 +2201,22 @@ Fixes Format. * C++ Format now uses MSVC intrinsics for better formatting performance - ([\#115](), [\#116](), [\#118]() and [\#121]()). Previously these + (#115, #116, #118 and #121). Previously these optimizations where only used on GCC and Clang. Thanks to [\@CarterLi](https://github.com/CarterLi) and [\@objectx](https://github.com/objectx). -* CMake install target ([\#119]()). Thanks to +* CMake install target (#119). Thanks to [\@TrentHouliston](https://github.com/TrentHouliston). You can now install C++ Format with `make install` command. -* Improved [Biicode](http://www.biicode.com/) support ([\#98]() and [\#104]()). +* Improved [Biicode](http://www.biicode.com/) support (#98 and #104). Thanks to [\@MariadeAnton](https://github.com/MariadeAnton) and [\@franramirez688](https://github.com/franramirez688). * Improved support for building with [Android - NDK](https://developer.android.com/tools/sdk/ndk/index.html) ([\#107]()). + NDK](https://developer.android.com/tools/sdk/ndk/index.html) (#107). Thanks to [\@newnon](https://github.com/newnon). The [android-ndk-example](https://github.com/fmtlib/android-ndk-example) @@ -2223,23 +2224,23 @@ Fixes ![image](https://raw.githubusercontent.com/fmtlib/android-ndk-example/%0Amaster/screenshot.png) -* Improved documentation of `SystemError` and `WindowsError` ([\#54]()). +* Improved documentation of `SystemError` and `WindowsError` (#54). -* Various code improvements ([\#110](), [\#111]() [\#112]()). Thanks to +* Various code improvements (#110, #111 #112). Thanks to [\@CarterLi](https://github.com/CarterLi). * Improved compile-time errors when formatting wide into narrow strings - ([\#117]()). + (#117). * Fixed `BasicWriter::write` without formatting arguments when C++11 support is - disabled ([\#109]()). + disabled (#109). -* Fixed header-only build on OS X with GCC 4.9 ([\#124]()). +* Fixed header-only build on OS X with GCC 4.9 (#124). -* Fixed packaging issues ([\#94]()). +* Fixed packaging issues (#94). * Added [changelog](https://github.com/fmtlib/fmt/blob/master/ChangeLog.rst) - ([\#103]()). + (#103). 1.0.0 - 2015-02-05 ================== @@ -2247,31 +2248,31 @@ Fixes * Add support for a header-only configuration when `FMT_HEADER_ONLY` is defined before including `format.h`: - ``` {.c++} + ```c++ #define FMT_HEADER_ONLY #include "format.h" ``` * Compute string length in the constructor of `BasicStringRef` instead of the - `size` method ([\#79]()). This eliminates size computation for string literals + `size` method (#79). This eliminates size computation for string literals on reasonable optimizing compilers. * Fix formatting of types with overloaded `operator <<` for `std::wostream` - ([\#86]()): + (#86): - ``` {.c++} + ```c++ fmt::format(L"The date is {0}", Date(2012, 12, 9)); ``` -* Fix linkage of tests on Arch Linux ([\#89]()). +* Fix linkage of tests on Arch Linux (#89). -* Allow precision specifier for non-float arguments ([\#90]()): +* Allow precision specifier for non-float arguments (#90): - ``` {.c++} + ```c++ fmt::print("{:.3}\n", "Carpet"); // prints "Car" ``` -* Fix build on Android NDK ([\#93]()) +* Fix build on Android NDK (#93) * Improvements to documentation build procedure. @@ -2293,30 +2294,30 @@ Fixes Old code: - ``` {.c++} + ```c++ fmt::Writer w; ``` New code: - ``` {.c++} + ```c++ fmt::MemoryWriter w; ``` If you pass `fmt::Writer` by reference, you can continue to do so: - ``` {.c++} + ```c++ void f(fmt::Writer &w); ``` This doesn\'t affect the formatting API. -* Support for custom memory allocators ([\#69]()) +* Support for custom memory allocators (#69) * Formatting functions now accept [signed char]{.title-ref} and [unsigned - char]{.title-ref} strings as arguments ([\#73]()): + char]{.title-ref} strings as arguments (#73): - ``` {.c++} + ```c++ auto s = format("GLSL version: {}", glGetString(GL_VERSION)); ``` @@ -2339,14 +2340,14 @@ Fixes * Safe printf implementation with a POSIX extension for positional arguments: - ``` {.c++} + ```c++ fmt::printf("Elapsed time: %.2f seconds", 1.23); fmt::printf("%1$s, %3$d %2$s", weekday, month, day); ``` -* Arguments of `char` type can now be formatted as integers ([\#55]()): +* Arguments of `char` type can now be formatted as integers (#55): - ``` {.c++} + ```c++ fmt::format("0x{0:02X}", 'a'); ``` @@ -2367,7 +2368,7 @@ Fixes wrapper functions defined with the `FMT_VARIADIC` macro. You can use this macro for defining your own portable variadic functions: - ``` {.c++} + ```c++ void report_error(const char *format, const fmt::ArgList &args) { fmt::print("Error: {}"); fmt::print(format, args); @@ -2385,20 +2386,20 @@ Fixes * Simplified common case of formatting an `std::string`. Now it requires a single function call: - ``` {.c++} + ```c++ std::string s = format("The answer is {}.", 42); ``` Previously it required 2 function calls: - ``` {.c++} + ```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`: - ``` {.c++} + ```c++ fmt::Writer w; w.write("The answer is {}.", 42); w.c_str(); // returns a C string @@ -2411,7 +2412,7 @@ Fixes * 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 - CapitalizedWords. Issue [\#50](). + CapitalizedWords. Issue #50. * Old functions are marked as deprecated and will be removed in the next release. @@ -2420,14 +2421,14 @@ Fixes * Experimental support for printf format specifications (work in progress): - ``` {.c++} + ```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`: - ``` {.c++} + ```c++ print("{:a}", -42.0); // Prints -0x1.5p+5 print("{:A}", -42.0); // Prints -0X1.5P+5 ``` @@ -2442,7 +2443,7 @@ Fixes * `Writer::Format` now has a variadic overload: - ``` {.c++} + ```c++ Writer out; out.Format("Look, I'm {}!", "variadic"); ``` @@ -2451,7 +2452,7 @@ Fixes `Format` function now returns `Writer` instead of `std::string`. Use the `str` function to convert it to `std::string`: - ``` {.c++} + ```c++ std::string s = str(Format("Look, I'm {}!", "variadic")); ``` @@ -2464,7 +2465,7 @@ Fixes `SystemError` containing the formatted message and system-specific error description. For example, the following code - ``` {.c++} + ```c++ FILE *f = fopen(filename, "r"); if (!f) ThrowSystemError(errno, "Failed to open file '{}'") << filename;