Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fmtlib: updated to 9.1.0 #111

Closed
wants to merge 1 commit into from
Closed

fmtlib: updated to 9.1.0 #111

wants to merge 1 commit into from

Commits on Sep 23, 2022

  1. fmtlib: updated to 9.1.0

    9.1.0 - 2022-08-27
    ------------------
    
    * ``fmt::formatted_size`` now works at compile time
      . For example
      (`godbolt <https://godbolt.org/z/1MW5rMdf8>`__):
    
      .. code:: c++
    
         #include <fmt/compile.h>
    
         int main() {
           using namespace fmt::literals;
           constexpr size_t n = fmt::formatted_size("{}"_cf, 42);
           fmt::print("{}\n", n); // prints 2
         }
    
    * Fixed handling of invalid UTF-8.
    
    * Improved Unicode support in ``ostream`` overloads of ``print``.
    
    * Fixed handling of the sign specifier in localized formatting on systems with
      32-bit ``wchar_t`` .
    
    * Added support for wide streams to ``fmt::streamed``.
    
    * Added the ``n`` specifier that disables the output of delimiters when
      formatting ranges.
      For example (`godbolt <https://godbolt.org/z/roKqGdj8c>`__):
    
      .. code:: c++
    
         #include <fmt/ranges.h>
         #include <vector>
    
         int main() {
           auto v = std::vector{1, 2, 3};
           fmt::print("{:n}\n", v); // prints 1, 2, 3
         }
    
    * Worked around problematic ``std::string_view`` constructors introduced in
      C++23
    
    * Improve handling (exclusion) of recursive ranges
    
    * Improved error reporting in format string compilation.
    
    * Improved the implementation of
      `Dragonbox <https://github.com/jk-jeon/dragonbox>`_, the algorithm used for
      the default floating-point formatting.
    
    * Fixed issues with floating-point formatting on exotic platforms.
    
    * Improved the implementation of chrono formatting.
    
    * Improved documentation.
    
    * Improved build configuration.
    
    * Fixed various warnings and compilation issues.
    
    9.0.0 - 2022-07-04
    ------------------
    
    * Switched to the internal floating point formatter for all decimal presentation
      formats. In particular this results in consistent rounding on all platforms
      and removing the ``s[n]printf`` fallback for decimal FP formatting.
    
    * Compile-time floating point formatting no longer requires the header-only
      mode. For example (`godbolt <https://godbolt.org/z/G37PTeG3b>`__):
    
      .. code:: c++
    
         #include <array>
         #include <fmt/compile.h>
    
         consteval auto compile_time_dtoa(double value) -> std::array<char, 10> {
           auto result = std::array<char, 10>();
           fmt::format_to(result.data(), FMT_COMPILE("{}"), value);
           return result;
         }
    
         constexpr auto answer = compile_time_dtoa(0.42);
    
      works with the default settings.
    
    * Improved the implementation of
      `Dragonbox <https://github.com/jk-jeon/dragonbox>`_, the algorithm used for
      the default floating-point formatting.
    
    * Made ``fmt::to_string`` work with ``__float128``. This uses the internal
      FP formatter and works even on system without ``__float128`` support in
      ``[s]printf``.
    
    * Disabled automatic ``std::ostream`` insertion operator (``operator<<``)
      discovery when ``fmt/ostream.h`` is included to prevent ODR violations.
      You can get the old behavior by defining ``FMT_DEPRECATED_OSTREAM`` but this
      will be removed in the next major release. Use ``fmt::streamed`` or
      ``fmt::ostream_formatter`` to enable formatting via ``std::ostream`` instead.
    
    * Added ``fmt::ostream_formatter`` that can be used to write ``formatter``
      specializations that perform formatting via ``std::ostream``.
      For example (`godbolt <https://godbolt.org/z/5sEc5qMsf>`__):
    
      .. code:: c++
    
         #include <fmt/ostream.h>
    
         struct date {
           int year, month, day;
    
           friend std::ostream& operator<<(std::ostream& os, const date& d) {
             return os << d.year << '-' << d.month << '-' << d.day;
           }
         };
    
         template <> struct fmt::formatter<date> : ostream_formatter {};
    
         std::string s = fmt::format("The date is {}", date{2012, 12, 9});
         // s == "The date is 2012-12-9"
    
    * Added the ``fmt::streamed`` function that takes an object and formats it
      via ``std::ostream``.
      For example (`godbolt <https://godbolt.org/z/5G3346G1f>`__):
    
      .. code:: c++
    
         #include <thread>
         #include <fmt/ostream.h>
    
         int main() {
           fmt::print("Current thread id: {}\n",
                      fmt::streamed(std::this_thread::get_id()));
         }
    
      Note that ``fmt/std.h`` provides a ``formatter`` specialization for
      ``std::thread::id`` so you don't need to format it via ``std::ostream``.
    
    * Deprecated implicit conversions of unscoped enums to integers for consistency
      with scoped enums.
    
    * Added an argument-dependent lookup based ``format_as`` extension API to
      simplify formatting of enums.
    
    * Added experimental ``std::variant`` formatting support.
      For example (`godbolt <https://godbolt.org/z/KG9z6cq68>`__):
    
      .. code:: c++
    
         #include <variant>
         #include <fmt/std.h>
    
         int main() {
           auto v = std::variant<int, std::string>(42);
           fmt::print("{}\n", v);
         }
    
      prints::
    
         variant(42)
    
      Thanks `@jehelset <https://github.com/jehelset>`_.
    
    * Added experimental ``std::filesystem::path`` formatting support
      (`#2865 <https://github.com/fmtlib/fmt/issues/2865>`_,
      `#2902 <https://github.com/fmtlib/fmt/pull/2902>`_,
      `#2917 <https://github.com/fmtlib/fmt/issues/2917>`_,
      `#2918 <https://github.com/fmtlib/fmt/pull/2918>`_).
      For example (`godbolt <https://godbolt.org/z/o44dMexEb>`__):
    
      .. code:: c++
    
         #include <filesystem>
         #include <fmt/std.h>
    
         int main() {
           fmt::print("There is no place like {}.", std::filesystem::path("/home"));
         }
    
      prints::
    
         There is no place like "/home".
    
    * Added a ``std::thread::id`` formatter to ``fmt/std.h``.
      For example (`godbolt <https://godbolt.org/z/j1azbYf3E>`__):
    
      .. code:: c++
    
         #include <thread>
         #include <fmt/std.h>
    
         int main() {
           fmt::print("Current thread id: {}\n", std::this_thread::get_id());
         }
    
    * Added ``fmt::styled`` that applies a text style to an individual argument.
      .
      For example (`godbolt <https://godbolt.org/z/vWGW7v5M6>`__):
    
      .. code:: c++
    
         #include <fmt/chrono.h>
         #include <fmt/color.h>
    
         int main() {
           auto now = std::chrono::system_clock::now();
           fmt::print(
             "[{}] {}: {}\n",
             fmt::styled(now, fmt::emphasis::bold),
             fmt::styled("error", fg(fmt::color::red)),
             "something went wrong");
         }
    
    * Made ``fmt::print`` overload for text styles correctly handle UTF-8.
    
    * Fixed Unicode handling when writing to an ostream.
    
    * Added support for nested specifiers to range formatting:
    
      .. code:: c++
    
         #include <vector>
         #include <fmt/ranges.h>
    
         int main() {
           fmt::print("{::#x}\n", std::vector{10, 20, 30});
         }
    
      prints ``[0xa, 0x14, 0x1e]``.
    
    * Implemented escaping of wide strings in ranges.
    
    * Added support for ranges with ``begin`` / ``end`` found via the
      argument-dependent lookup.
    
    * Fixed formatting of certain kinds of ranges of ranges.
    
    * Fixed handling of maps with element types other than ``std::pair``.
    
    * Made tuple formatter enabled only if elements are formattable.
    
    * Made ``fmt::join`` compatible with format string compilation.
    
    * Made compile-time checks work with named arguments of custom types and
      ``std::ostream`` ``print`` overloads.
    
    * Removed ``make_args_checked`` because it is no longer needed for compile-time.
    
    * Removed the following deprecated APIs: ``_format``, ``arg_join``,
      the ``format_to`` overload that takes a memory buffer,
      ``[v]fprintf`` that takes an ``ostream``.
    
    * Removed the deprecated implicit conversion of ``[const] signed char*`` and
      ``[const] unsigned char*`` to C strings.
    
    * Removed the deprecated ``fmt/locale.h``.
    
    * Replaced the deprecated ``fileno()`` with ``descriptor()`` in
      ``buffered_file``.
    
    * Moved ``to_string_view`` to the ``detail`` namespace since it's an
      implementation detail.
    
    * Made access mode of a created file consistent with ``fopen`` by setting
      ``S_IWGRP`` and ``S_IWOTH``.
    
    * Removed a redundant buffer resize when formatting to ``std::ostream``.
    
    * Made precision computation for strings consistent with width.
      .
    
    * Fixed handling of locale separators in floating point formatting.
    
    * Made sign specifiers work with ``__int128_t``.
    
    * Improved support for systems such as CHERI with extra data stored in pointers.
    
    * Improved documentation.
    
    * Improved build configuration.
    
    * Fixed various warnings and compilation issues.
    Wongboo committed Sep 23, 2022
    Configuration menu
    Copy the full SHA
    7604a5a View commit details
    Browse the repository at this point in the history