Skip to content

@vitaut vitaut released this May 7, 2016 · 2658 commits to master since this release

  • The project has been renamed from C++ Format (cppformat) to fmt for consistency with the used namespace and macro prefix (#307). Library headers are now located in the fmt directory:

    #include "fmt/format.h"

    Including format.h from the cppformat directory is deprecated but works via a proxy header which will be removed in the next major version.The documentation is now available at

  • Added support for strftime-like date and time formatting (#283):

    #include "fmt/time.h"
    std::time_t t = std::time(nullptr);
    // Prints "The date is 2016-04-29." (with the current date)
    fmt::print("The date is {:%Y-%m-%d}.", *std::localtime(&t));
  • std::ostream support including formatting of user-defined types that provide overloaded operator<< has been moved to fmt/ostream.h:

    #include "fmt/ostream.h"
    class Date {
      int year_, month_, day_;
      Date(int year, int month, int day) : year_(year), month_(month), day_(day) {}
      friend std::ostream &operator<<(std::ostream &os, const Date &d) {
        return os << d.year_ << '-' << d.month_ << '-' << d.day_;
    std::string s = fmt::format("The date is {}", Date(2012, 12, 9));
    // s == "The date is 2012-12-9"
  • Added support for custom argument formatters (#235).

  • Added support for locale-specific integer formatting with the n specifier (#305):

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

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

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

  • Fixed detection of user-defined literal support on Intel C++ compiler (#311, #312). Thanks to @dean0x7d (Dean Moldovan) and @speth (Ray Speth).

  • Reduced compile time (#243, #249, #317):Thanks to @dean0x7d (Dean Moldovan).

  • Compile test fixes (#313). Thanks to @dean0x7d (Dean Moldovan).

  • Documentation fixes (#239, #248, #252, #258, #260, #301, #309). Thanks to @ReadmeCritic @Gachapen (Magnus Bjerke Vik) and @jwilk (Jakub Wilk).

  • Fixed compiler and sanitizer warnings (#244, #256, #259, #263, #274, #277, #286, #291, #296, #308) Thanks to @mwinterb, @pweiskircher (Patrik Weiskircher), @Naios.

  • Improved compatibility with Windows Store apps (#280, #285) Thanks to @mwinterb.

  • Added tests of compatibility with older C++ standards (#273). Thanks to @niosHD.

  • Fixed Android build (#271). Thanks to @newnon.

  • Changed ArgMap to be backed by a vector instead of a map. (#261, #262). Thanks to @mwinterb.

  • Added fprintf overload that writes to a std::ostream (#251). Thanks to nickhutchinson (Nicholas Hutchinson).

  • Export symbols when building a Windows DLL (#245). Thanks to macdems (Maciek Dems).

  • Fixed compilation on Cygwin (#304).

  • Implemented a workaround for a bug in Apple LLVM version 4.2 of clang (#276).

  • Implemented a workaround for Google Test bug #705 on gcc 6 (#268). Thanks to octoploid.

  • Removed Biicode support because the latter has been discontinued.

Assets 3
You can’t perform that action at this time.