Skip to content

2.0.0

Compare
Choose a tag to compare
@vitaut vitaut released this 01 Dec 15:36
· 5501 commits to master since this release

General

  • [Breaking] Named arguments (#169, #173, #174):

    fmt::print("The answer is {answer}.", fmt::arg("answer", 42));

    Thanks to @jamboree.

  • [Experimental] User-defined literals for format and named arguments (#204, #206, #207):

    using namespace fmt::literals;
    fmt::print("The answer is {answer}.", "answer"_a=42);

    Thanks to @dean0x7d (Dean Moldovan).

  • [Breaking] Formatting of more than 16 arguments is now supported when using variadic templates (#141). Thanks to @Shauren.

  • Runtime width specification (#168):

    fmt::format("{0:{1}}", 42, 5); // gives "   42"

    Thanks to @jamboree.

  • [Breaking] Enums are now formatted with an overloaded std::ostream insertion operator (operator<<) if available (#232).

  • [Breaking] Changed default bool format to textual, "true" or "false" (#170):

    fmt::print("{}", true); // prints "true"

    To print bool as a number use numeric format specifier such as d:

    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):

    fmt::printf("%s", true); // prints "true"

    Thanks to @LarsGullik.

  • [Breaking] signed char and unsigned char are now formatted as integers by default (#217).

  • [Breaking] Pointers to C strings can now be formatted with the p specifier (#223):

    fmt::print("{:p}", "test"); // prints pointer value

    Thanks to @LarsGullik.

  • [Breaking] fmt::printf and fmt::sprintf now print null pointers as (nil) and null strings as (null) for consistency with glibc (#226). Thanks to @LarsGullik.

  • [Breaking] fmt::(s)printf now supports formatting of objects of user-defined types that provide an overloaded std::ostream insertion operator (operator<<) (#201):

    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 (Jean-Charles Lefebvre).

  • [Breaking] Improved compatibility between BasicStringRef and std::experimental::basic_string_view (#100, #159, #183):

    • Comparison operators now compare string content, not pointers
    • BasicStringRef::c_str replaced by BasicStringRef::data
    • BasicStringRef is no longer assumed to be null-terminated

    References to null-terminated strings are now represented by a new class, BasicCStringRef.

  • Dependency on pthreads introduced by Google Test is now optional (#185).

  • 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 Martin).

  • noexcept is now used when compiling with MSVC2015 (#215). Thanks to @dmkrepo (Dmitriy).

  • 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 (Alf P. Steinbach).

  • [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 @DevO2012.

  • Improved support for custom character types (#171). Thanks to @alfps (Alf P. Steinbach).

  • Added an option to disable use of IOStreams when FMT_USE_IOSTREAMS is defined as 0 before including format.h (#205, #208). Thanks to @JodiTheTigger.

  • Improved detection of isnan, isinf and signbit.

Optimization

  • Made formatting of user-defined types more efficient with a custom stream buffer (#92, #230). Thanks to @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).
  • [Breaking] Reduced compiled code size (#143, #149).

Distribution

Documentation

Fixes