Commit d6047cdc authored by Victor Zverovich's avatar Victor Zverovich

Update changelog

parent 810241b3
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 <fmt/compile.h>
// 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 <fmt/core.h>
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 <fmt/format.h>
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<fmt::format_context> 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 <cmath>
#include <fmt/core.h>
......@@ -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 <tuple>
#include <fmt/ranges.h>
......@@ -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 <fmt/locale.h>
#include <fmt/ostream.h>
......@@ -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]()).
* 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
(#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](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 <locale>
#include <fmt/core.h>
......@@ -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 <fmt/format.h>
......@@ -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 <iostream>
#include <fmt/ostream.h>
......@@ -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 <fmt/compile.h>
auto f = fmt::compile<int>("{}");
......@@ -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<double>(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 <fmt/color.h>
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<int> 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 <fmt/chrono.h>
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 <fmt/color.h>
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 <fmt/color.h>
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 <fmt/color.h>
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 <fmt/locale.h>
struct numpunct : std::numpunct<char> {
......@@ -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 <fmt/format.h>
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 <fmt/format.h>
......@@ -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 <fmt/format.h>
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 <vector>
#include <fmt/format.h>
......@@ -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 <fmt/format.h>
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/core.h>
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 <typename... Args>
......@@ -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 <fmt/ranges.h>
std::vector<int> 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 <fmt/time.h>
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 <fmt/core.h>
#include <experimental/string_view>
......@@ -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<double> 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<long long>::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
<http://cppformat.github.io/>.
* Added [Building the
documentation](https://fmt.dev/2.0.0/usage.html#building-the-documentation)
section to the documentation.
* Documentation build script is now compatible with Python 3 and newer pip
versions ([\#189](), [\#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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment