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

Some errors encountered when packaging #4144

Closed
kamrann opened this issue Sep 2, 2024 · 9 comments
Closed

Some errors encountered when packaging #4144

kamrann opened this issue Sep 2, 2024 · 9 comments

Comments

@kamrann
Copy link
Contributor

kamrann commented Sep 2, 2024

I'm trying to update the build2 fmt package to v11 and have run into a few issues with certain toolchains used by the build2 CI configurations. Some or all of these may simply be outside of fmt supported environments, and quite likely compiler/STL bugs rather than fmt bugs, but I'm not qualified to make that judgement, especially since I can't locally test most of these configurations, so am just posting the errors that I've run into.

All these are on latest master (bc3af51). I can just disable these configurations for the moment in the package, so if this is outside the scope of what fmt can support/address then no worries. I'm also curious though if there's a reason that the fmt CI (from what I can see) does not seem to be building with any recent compiler versions? Looks like the most recent clang used is 11, for example.

Link to full build2 CI output, which includes full platform/distribution details.

  1. There's an error building ranges-test on debian/clang17:
In file included from /tmp/dist/fmt-tests-11.0.1-a.0.20240902045134.60423130ce74/basics/test/ranges-test.cc:8:
In file included from /tmp/dist/fmt-11.0.1-a.0.20240902045134.60423130ce74/fmt/include/fmt/ranges.h:13:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/iterator:66:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/streambuf_iterator.h:35:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/streambuf:43:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/ios_base.h:41:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/locale_classes.h:40:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/string:58:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/memory_resource.h:41:
In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/uses_allocator_args.h:38:
/usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/tuple:691:2: error: pack expansion contains parameter pack '_UTypes' that has a different length (1 vs. 0) from outer parameter packs
  691 |         using __convertible = __and_<is_convertible<_UTypes, _Types>...>;
      |         ^~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/tuple:853:27: note: in instantiation of template type alias '__convertible' requested here
  853 |           = _TCC<true>::template __convertible<_Args...>::value;
      |                                  ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/tuple:948:12: note: in instantiation of static data member 'std::tuple<std::vector<char>>::__convertible<>' requested here
  948 |         explicit(!__convertible<_UElements&...>)
      |                   ^
/tmp/dist/fmt-tests-11.0.1-a.0.20240902045134.60423130ce74/basics/test/ranges-test.cc:581:31: note: while substituting deduced template arguments into function template 'tuple' [with _UElements = (no value)]
  581 |   EXPECT_EQ(fmt::format("{}", std::tuple<std::vector<char>>{{'x'}}), "(['x'])");
      |                               ^
  1. Some tests are failing on freebsd:
/tmp/dist/fmt-tests-11.0.1-a.0.20240902045134.60423130ce74/basics/test/xchar-test.cc:575: Failure
Value of: saturdays
Expected: contains at least one element that is equal to L"s\xE1" L"b."
  Actual: { L"s\xE1" L"b", L"s\xE1." }
[  FAILED  ] locale_test.chrono_weekday (2 ms)
/tmp/dist/fmt-tests-11.0.1-a.0.20240902045134.60423130ce74/basics/test/chrono-test.cc:767: Failure
Value of: saturdays
Expected: contains at least one element that is equal to "s\xC3\xA1" "b."
    As Text: "sáb."
  Actual: { "s\xC3\xA1" "b"
    As Text: "sáb", "s\xC3\xA1."
    As Text: "sá." }
/tmp/dist/fmt-tests-11.0.1-a.0.20240902045134.60423130ce74/basics/test/chrono-test.cc:768: Failure
Value of: saturdays
Expected: contains at least one element that is equal to "s\xC3\xA1" "b."
    As Text: "sáb."
  Actual: { "s\xC3\xA1" "b"
    As Text: "sáb", "s\xC3\xA1."
    As Text: "sá." }
/tmp/dist/fmt-tests-11.0.1-a.0.20240902045134.60423130ce74/basics/test/chrono-test.cc:769: Failure
Value of: saturdays
Expected: contains at least one element that is equal to "s\xC3\xA1" "b."
    As Text: "sáb."
  Actual: { "s\xC3\xA1" "b"
    As Text: "sáb", "s\xC3\xA1."
    As Text: "sá." }
[  FAILED  ] chrono_test.weekday (1 ms)
  1. The library itself fails to build on MSVC 17.8. Since it compiles fine on both earlier and later versions I guess this is most likely a compiler bug, but for completeness:
C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\include\fmt\base.h(2200): error C2672: 'fmt::v11::detail::buffer<T>::append': no matching overloaded function found
        with
        [
            T=char
        ]
C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\include\fmt\base.h(1944): note: could be 'void fmt::v11::detail::buffer<T>::append(const U *,const U *)'
        with
        [
            T=char
        ]
C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\include\fmt\base.h(2200): note: Failed to specialize function template 'void fmt::v11::detail::buffer<T>::append(const U *,const U *)'
        with
        [
            T=char
        ]
C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\include\fmt\base.h(2200): note: With the following template arguments:
C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\include\fmt\base.h(2200): note: 'U=char'
C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\include\fmt\base.h(2200): note: the template instantiation context (the oldest one first) is
C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\include\fmt\format.h(3180): note: see reference to function template instantiation 'OutputIt fmt::v11::detail::format_decimal<char,uint32_t,fmt::v11::appender,0>(OutputIt,UInt,int)' being compiled
        with
        [
            OutputIt=fmt::v11::appender,
            UInt=uint32_t
        ]
C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\include\fmt\format.h(1376): note: see reference to function template instantiation 'OutputIt fmt::v11::detail::copy_noinline<char,char*,OutputIt>(InputIt,InputIt,OutputIt)' being compiled
        with
        [
            OutputIt=fmt::v11::appender,
            InputIt=char *
        ]
C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\include\fmt\format.h(599): note: see reference to function template instantiation 'OutputIt fmt::v11::detail::copy<char,InputIt,OutputIt,0>(InputIt,InputIt,OutputIt)' being compiled
        with
        [
            OutputIt=fmt::v11::appender,
            InputIt=char *
        ]
error: process C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.38.33130/bin/HostX64/x64/cl.exe exited with code 2
  info: command line: "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.38.33130/bin/HostX64/x64/cl.exe" -IC:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt/include -IC:\Coding\Build2\third-party-packaging\build2-packaging\build\msvc\fmt -IC:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt -DFMT_LIB_EXPORT /Zi /nologo /std:c++latest /Zc:__cplusplus /permissive- /I "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um" /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\winrt" /diagnostics:color /utf-8 /EHsc /MD /Fd: ..\..\build\msvc\fmt\fmt\src\format.dll.obj.pdb /Fo: ..\..\build\msvc\fmt\fmt\src\format.dll.obj /c /TP C:\Coding\Build2\third-party-packaging\build2-packaging\fmt\fmt\fmt\src\format.cc
@vitaut
Copy link
Contributor

vitaut commented Sep 2, 2024

FreeBSD failures are just different localized outputs and are easy to fix. As for clang 17 issue, I wasn't able to repro it in https://www.godbolt.org/z/cePKMjWa8. You'll need to provide more repro details.

@kamrann
Copy link
Contributor Author

kamrann commented Sep 3, 2024

Eventually managed to repro on Compiler Explorer.
Seems to be specifically the combination of Clang 17, libstdc++ and c++23 mode. On that combo it shows up on prior fmt versions too, but all is fine on Clang 18. So seems like it's probably just another compiler bug.

Edit: yeah it seems you can remove fmt entirely and the tuple alone generates the error ;)

@kamrann
Copy link
Contributor Author

kamrann commented Sep 3, 2024

For reference: llvm/llvm-project#61415

@vitaut
Copy link
Contributor

vitaut commented Sep 3, 2024

FreeBSD issue should be fixed in 79e5ae9.

@vitaut
Copy link
Contributor

vitaut commented Sep 3, 2024

MSVC repro: https://www.godbolt.org/z/rP8s67vod

@vitaut
Copy link
Contributor

vitaut commented Sep 3, 2024

Worked around the clang bug in 4cae2da.

@vitaut
Copy link
Contributor

vitaut commented Sep 3, 2024

There is already a workaround for the MSVC bug but the version check was too optimistic. Fixed in 15694c9.

Thanks for reporting.

@vitaut vitaut closed this as completed Sep 3, 2024
@kamrann
Copy link
Contributor Author

kamrann commented Sep 4, 2024

Fantastic, thanks!

Looks like the MSVC 17.8 workaround triggers a follow-on constexpr error when building the tests, output below. Everything else on the CI has now passed though (modules builds aside, will open a new issue for that once I've investigated a bit further).

C:\tmp\dist\fmt-tests-11.0.1-a.0.20240904001404.105613fbd26a\basics\test\compile-test.cc(205): error C3615: constexpr function 'fmt::v11::detail::copy' cannot result in a constant expression
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt\include\fmt\base.h(2115): note: failure was caused by call of undefined function or one not declared 'constexpr'
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt\include\fmt\base.h(2115): note: see usage of 'fmt::v11::detail::buffer<T>::append'
        with
        [
            T=char
        ]
C:\tmp\dist\fmt-tests-11.0.1-a.0.20240904001404.105613fbd26a\basics\test\compile-test.cc(205): note: the call stack of the evaluation (the oldest call first) is
C:\tmp\dist\fmt-tests-11.0.1-a.0.20240904001404.105613fbd26a\basics\test\compile-test.cc(206): note: while evaluating function 'size_t fmt::v11::formatted_size<compile_test_constexpr_formatted_size_Test::TestBody::<lambda_2>::()::FMT_COMPILE_STRING,int,0>(const S &,const int &)'
        with
        [
            S=compile_test_constexpr_formatted_size_Test::TestBody::<lambda_2>::()::FMT_COMPILE_STRING
        ]
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt/include\fmt/compile.h(521): note: while evaluating function 'OutputIt fmt::v11::format_to<fmt::v11::appender,S,const int&,0>(OutputIt,const S &,const int &)'
        with
        [
            OutputIt=fmt::v11::appender,
            S=compile_test_constexpr_formatted_size_Test::TestBody::<lambda_2>::()::FMT_COMPILE_STRING
        ]
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt/include\fmt/compile.h(501): note: while evaluating function 'OutputIt fmt::v11::format_to<OutputIt,T,int,0>(OutputIt,const CompiledFormat &,const int &)'
        with
        [
            OutputIt=fmt::v11::appender,
            T=fmt::v11::detail::spec_field<char_type,int,0>,
            CompiledFormat=fmt::v11::detail::spec_field<char_type,int,0>
        ]
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt/include\fmt/compile.h(461): note: while evaluating function 'OutputIt fmt::v11::detail::spec_field<char_type,int,0>::format<OutputIt,int>(OutputIt,const int &) const'
        with
        [
            OutputIt=fmt::v11::appender
        ]
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt/include\fmt/compile.h(221): note: while evaluating function 'fmt::v11::appender fmt::v11::detail::native_formatter<T,Char,fmt::v11::detail::type::int_type>::format<fmt::v11::context>(const T &,FormatContext &) const'
        with
        [
            T=int,
            Char=char,
            FormatContext=fmt::v11::context
        ]
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt\include\fmt\format.h(4268): note: while evaluating function 'fmt::v11::basic_appender<char> fmt::v11::detail::write<Char,T,0>(fmt::v11::basic_appender<char>,T,const fmt::v11::format_specs &,fmt::v11::detail::locale_ref)'
        with
        [
            Char=char,
            T=int
        ]
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt\include\fmt\format.h(2290): note: while evaluating function 'OutputIt fmt::v11::detail::write_int_noinline<Char,fmt::v11::basic_appender<char>,unsigned int>(OutputIt,fmt::v11::detail::write_int_arg<unsigned int>,const fmt::v11::format_specs &)'
        with
        [
            OutputIt=fmt::v11::basic_appender<char>,
            Char=char
        ]
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt\include\fmt\format.h(2279): note: while evaluating function 'OutputIt fmt::v11::detail::write_int<Char,OutputIt,unsigned int>(OutputIt,fmt::v11::detail::write_int_arg<unsigned int>,const fmt::v11::format_specs &)'
        with
        [
            OutputIt=fmt::v11::basic_appender<char>,
            Char=char
        ]
C:\tmp\dist\fmt-11.0.1-a.0.20240904001404.105613fbd26a\fmt\include\fmt\format.h(2261): note: while evaluating function 'OutputIt fmt::v11::detail::copy<Char,const char*,fmt::v11::basic_appender<char>,0>(InputIt,InputIt,OutputIt)'
        with
        [
            OutputIt=fmt::v11::basic_appender<char>,
            Char=char,
            InputIt=const char *
        ]

@vitaut vitaut reopened this Sep 4, 2024
@vitaut
Copy link
Contributor

vitaut commented Sep 4, 2024

Updated compile-test in 565461a.

@vitaut vitaut closed this as completed Sep 4, 2024
mtremer pushed a commit to ipfire/ipfire-2.x that referenced this issue Feb 22, 2025
- Update from version 11.0.2 to 11.1.3
- Update of rootfile
- Changelog
    11.1.3
	- Fixed compilation on GCC 9.4 (fmtlib/fmt#4313).
	- Worked around an internal compiler error when using C++20 modules with GCC
	  14.2 and earlier (fmtlib/fmt#4295).
	- Worked around a bug in GCC 6 (fmtlib/fmt#4318).
	- Fixed an issue caused by instantiating `formatter<const T>`
	  (fmtlib/fmt#4303,
	  fmtlib/fmt#4325). Thanks @timsong-cpp.
	- Fixed formatting into `std::ostreambuf_iterator` when using format string
	  compilation (fmtlib/fmt#4309,
	  fmtlib/fmt#4312). Thanks @phprus.
	- Restored a constraint on the map formatter so that it correctly reports as
	  unformattable when the element is (fmtlib/fmt#4326).
	  Thanks @timsong-cpp.
	- Reduced the size of format specs (fmtlib/fmt#4298).
	- Readded `args()` to `fmt::format_context`
	  (fmtlib/fmt#4307,
	  fmtlib/fmt#4310). Thanks @Erroneous1.
	- Fixed a bogus MSVC warning (fmtlib/fmt#4314,
	  fmtlib/fmt#4322). Thanks @ZehMatt.
	- Fixed a pedantic mode error in the CMake config
	  (fmtlib/fmt#4327). Thanks @rlalik.
    11.1.2
	- Fixed ABI compatibility with earlier 11.x versions
	  (fmtlib/fmt#4292).
	- Added `wchar_t` support to the `std::bitset` formatter
	  (fmtlib/fmt#4285,
	  fmtlib/fmt#4286,
	  fmtlib/fmt#4289,
	  fmtlib/fmt#4290). Thanks @phprus.
	- Prefixed CMake components with `fmt-` to simplify usage of {fmt} via
	  `add_subdirectory` (fmtlib/fmt#4283).
	- Updated docs for meson (fmtlib/fmt#4291).
	  Thanks @trim21.
	- Fixed a compilation error in chrono on nvcc
	  (fmtlib/fmt#4297,
	  fmtlib/fmt#4301). Thanks @breyerml.
	- Fixed various warnings
	  (fmtlib/fmt#4288,
	  fmtlib/fmt#4299). Thanks @GamesTrap and @edo9300.
    11.1.1
	- Fixed ABI compatibility with earlier 11.x versions
	  (fmtlib/fmt#4278).
	- Defined CMake components (`core` and `doc`) to allow docs to be installed
	  separately (fmtlib/fmt#4276).
	  Thanks @carlsmedstad.
    11.1.0
	- Improved C++20 module support
	  (fmtlib/fmt#4081,
	  fmtlib/fmt#4083,
	  fmtlib/fmt#4084,
	  fmtlib/fmt#4152,
	  fmtlib/fmt#4153,
	  fmtlib/fmt#4169,
	  fmtlib/fmt#4190,
	  fmtlib/fmt#4234,
	  fmtlib/fmt#4239).
	  Thanks @kamrann and @Arghnews.
	- Reduced debug (unoptimized) binary code size and the number of template
	  instantiations when passing formatting arguments. For example, unoptimized
	  binary code size for `fmt::print("{}", 42)` was reduced by ~40% on GCC and
	  ~60% on clang (x86-64).
	  GCC:
	  - Before: 161 instructions of which 105 are in reusable functions
	    ([godbolt](https://www.godbolt.org/z/s9bGoo4ze)).
	  - After: 116 instructions of which 60 are in reusable functions
	    ([godbolt](https://www.godbolt.org/z/r7GGGxMs6)).
	  Clang:
	  - Before: 310 instructions of which 251 are in reusable functions
	    ([godbolt](https://www.godbolt.org/z/Ts88b7M9o)).
	  - After: 194 instructions of which 135 are in reusable functions
	    ([godbolt](https://www.godbolt.org/z/vcrjP8ceW)).
	- Added an experimental `fmt::writer` API that can be used for writing to
	  different destinations such as files or strings
	  (fmtlib/fmt#2354).
	  For example ([godbolt](https://www.godbolt.org/z/rWoKfbP7e)):
		  ```c++
		  #include <fmt/os.h>
		  void write_text(fmt::writer w) {
		    w.print("The answer is {}.", 42);
		  }
		  int main() {
		    // Write to FILE.
		    write_text(stdout);
		    // Write to fmt::ostream.
		    auto f = fmt::output_file("myfile");
		    write_text(f);
		    // Write to std::string.
		    auto sb = fmt::string_buffer();
		    write_text(sb);
		    std::string s = sb.str();
		  }
		  ```
	- Added width and alignment support to the formatter of `std::error_code`.
	- Made `std::expected<void, E>` formattable
	  (fmtlib/fmt#4145,
	  fmtlib/fmt#4148).
	  For example ([godbolt](https://www.godbolt.org/z/hrj5c6G86)):
		  ```c++
		  fmt::print("{}", std::expected<void, int>());
		  ```
		  prints
		  ```
		  expected()
		  ```
	  Thanks @phprus.
	- Made `fmt::is_formattable<void>` SFINAE-friendly
	  (fmtlib/fmt#4147).
	- Added support for `_BitInt` formatting when using clang
	  (fmtlib/fmt#4007,
	  fmtlib/fmt#4072,
	  fmtlib/fmt#4140,
	  fmtlib/fmt#4173,
	  fmtlib/fmt#4176).
	  For example ([godbolt](https://www.godbolt.org/z/KWjbWec5z)):
		  ```c++
		  using int42 = _BitInt(42);
		  fmt::print("{}", int42(100));
		  ```
	  Thanks @Arghnews.
	- Added the `n` specifier for tuples and pairs
	  (fmtlib/fmt#4107). Thanks @someonewithpc.
	- Added support for tuple-like types to `fmt::join`
	  (fmtlib/fmt#4226,
	  fmtlib/fmt#4230). Thanks @phprus.
	- Made more types formattable at compile time
	  (fmtlib/fmt#4127). Thanks @AnthonyVH.
	- Implemented a more efficient compile-time `fmt::formatted_size`
	  (fmtlib/fmt#4102,
	  fmtlib/fmt#4103). Thanks @phprus.
	- Fixed compile-time formatting of some string types
	  (fmtlib/fmt#4065). Thanks @torshepherd.
	- Made compiled version of `fmt::format_to` work with
	  `std::back_insert_iterator<std::vector<char>>`
	  (fmtlib/fmt#4206,
	  fmtlib/fmt#4211). Thanks @phprus.
	- Added a formatter for `std::reference_wrapper`
	  (fmtlib/fmt#4163,
	  fmtlib/fmt#4164). Thanks @yfeldblum and @phprus.
	- Added experimental padding support (glibc `strftime` extension) to `%m`, `%j`
	  and `%Y` (fmtlib/fmt#4161). Thanks @KKhanhH.
	- Made microseconds formatted as `us` instead of `µs` if the Unicode support is
	  disabled (fmtlib/fmt#4088).
	- Fixed an unreleased regression in transcoding of surrogate pairs
	  (fmtlib/fmt#4094,
	  fmtlib/fmt#4095). Thanks @phprus.
	- Made `fmt::appender` satisfy `std::output_iterator` concept
	  (fmtlib/fmt#4092,
	  fmtlib/fmt#4093). Thanks @phprus.
	- Made `std::iterator_traits<fmt::appender>` standard-conforming
	  (fmtlib/fmt#4185). Thanks @CaseyCarter.
	- Made it easier to reuse `fmt::formatter<std::string_view>` for types with
	  an implicit conversion to `std::string_view`
	  (fmtlib/fmt#4036,
	  fmtlib/fmt#4055). Thanks @Arghnews.
	- Made it possible to disable `<filesystem>` use via `FMT_CPP_LIB_FILESYSTEM`
	  for compatibility with some video game console SDKs, e.g. Nintendo Switch SDK
	  (fmtlib/fmt#4257,
	  fmtlib/fmt#4258,
	  fmtlib/fmt#4259). Thanks @W4RH4WK and @phprus.
	- Fixed compatibility with platforms that use 80-bit `long double`
	  (fmtlib/fmt#4245,
	  fmtlib/fmt#4246). Thanks @jsirpoma.
	- Added support for UTF-32 code units greater than `0xFFFF` in fill
	  (fmtlib/fmt#4201).
	- Fixed handling of legacy encodings on Windows with GCC
	  (fmtlib/fmt#4162).
	- Made `fmt::to_string` take `fmt::basic_memory_buffer` by const reference
	  (fmtlib/fmt#4261,
	  fmtlib/fmt#4262). Thanks @sascha-devel.
	- Added `fmt::dynamic_format_arg_store::size`
	  (fmtlib/fmt#4270). Thanks @hannes-harnisch.
	- Removed the ability to control locale usage via an undocumented
	  `FMT_STATIC_THOUSANDS_SEPARATOR` in favor of `FMT_USE_LOCALE`.
	- Renamed `FMT_EXCEPTIONS` to `FMT_USE_EXCEPTIONS` for consistency with other
	  similar macros.
	- Improved include directory ordering to reduce the chance of including
	  incorrect headers when using multiple versions of {fmt}
	  (fmtlib/fmt#4116). Thanks @cdzhan.
	- Made it possible to compile a subset of {fmt} without the C++ runtime.
	- Improved documentation and README
	  (fmtlib/fmt#4066,
	  fmtlib/fmt#4117,
	  fmtlib/fmt#4203,
	  fmtlib/fmt#4235). Thanks @zyctree and @nikola-sh.
	- Improved the documentation generator (fmtlib/fmt#4110,
	  fmtlib/fmt#4115). Thanks @rturrado.
	- Improved CI (fmtlib/fmt#4155,
	  fmtlib/fmt#4151). Thanks @phprus.
	- Fixed various warnings and compilation issues
	  (fmtlib/fmt#2708,
	  fmtlib/fmt#4091,
	  fmtlib/fmt#4109,
	  fmtlib/fmt#4113,
	  fmtlib/fmt#4125,
	  fmtlib/fmt#4129,
	  fmtlib/fmt#4130,
	  fmtlib/fmt#4131,
	  fmtlib/fmt#4132,
	  fmtlib/fmt#4133,
	  fmtlib/fmt#4144,
	  fmtlib/fmt#4150,
	  fmtlib/fmt#4158,
	  fmtlib/fmt#4159,
	  fmtlib/fmt#4160,
	  fmtlib/fmt#4170,
	  fmtlib/fmt#4177,
	  fmtlib/fmt#4187,
	  fmtlib/fmt#4188,
	  fmtlib/fmt#4194,
	  fmtlib/fmt#4200,
	  fmtlib/fmt#4205,
	  fmtlib/fmt#4207,
	  fmtlib/fmt#4208,
	  fmtlib/fmt#4210,
	  fmtlib/fmt#4220,
	  fmtlib/fmt#4231,
	  fmtlib/fmt#4232,
	  fmtlib/fmt#4233,
	  fmtlib/fmt#4236,
	  fmtlib/fmt#4267,
	  fmtlib/fmt#4271).
	  Thanks @torsten48, @Arghnews, @tinfoilboy, @aminya, @Ottani, @zeroomega,
	  @c4v4, @kongy, @vinayyadav3016, @sergio-nsk, @phprus and @YexuanXiao.

Signed-off-by: Adolf Belka <[email protected]>
Signed-off-by: Michael Tremer <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants