diff --git a/dep/CMakeLists.txt b/dep/CMakeLists.txt
index f85f5037..03de2b3f 100644
--- a/dep/CMakeLists.txt
+++ b/dep/CMakeLists.txt
@@ -10,7 +10,6 @@
add_subdirectory(threads)
add_subdirectory(boost)
-add_subdirectory(process)
add_subdirectory(zlib)
add_subdirectory(g3dlite)
add_subdirectory(recastnavigation)
diff --git a/dep/fmt/CMakeLists.txt b/dep/fmt/CMakeLists.txt
index 4366dee9..fc9b1f79 100644
--- a/dep/fmt/CMakeLists.txt
+++ b/dep/fmt/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2008-2019 TrinityCore
+# This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
@@ -8,43 +8,30 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-include(CheckSymbolExists)
-if (WIN32)
- check_symbol_exists(open io.h HAVE_OPEN)
-else ()
- check_symbol_exists(open fcntl.h HAVE_OPEN)
-endif ()
+set(FMT_HEADERS
+ include/fmt/args.h
+ include/fmt/chrono.h
+ include/fmt/color.h
+ include/fmt/compile.h
+ include/fmt/core.h
+ include/fmt/format.h
+ include/fmt/format-inl.h
+ include/fmt/os.h
+ include/fmt/ostream.h
+ include/fmt/printf.h
+ include/fmt/ranges.h
+ include/fmt/std.h
+ include/fmt/xchar.h)
set(FMT_SOURCES
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/container.h
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/format.h
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/format.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/ostream.h
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/ostream.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/printf.h
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/printf.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/string.h
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/time.h)
+ src/format.cc
+ src/os.cc)
-if (HAVE_OPEN)
- set(FMT_SOURCES ${FMT_SOURCES}
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/posix.h
- ${CMAKE_CURRENT_SOURCE_DIR}/fmt/posix.cc)
-endif()
-
-add_library(fmt STATIC ${FMT_SOURCES})
+add_library(fmt STATIC ${FMT_SOURCES} ${FMT_HEADERS})
target_include_directories(fmt
PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR})
-
-target_compile_definitions(fmt
- PUBLIC
- -DFMT_USE_OVERRIDE
- -DFMT_USE_VARIADIC_TEMPLATES
- -DFMT_USE_RVALUE_REFERENCES
- -DFMT_USE_DELETED_FUNCTIONS
- -DFMT_USE_EXTERN_TEMPLATES)
+ ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_link_libraries(fmt
PRIVATE
diff --git a/dep/fmt/CONTRIBUTING.md b/dep/fmt/CONTRIBUTING.md
new file mode 100644
index 00000000..b82f1450
--- /dev/null
+++ b/dep/fmt/CONTRIBUTING.md
@@ -0,0 +1,20 @@
+Contributing to {fmt}
+=====================
+
+By submitting a pull request or a patch, you represent that you have the right
+to license your contribution to the {fmt} project owners and the community,
+agree that your contributions are licensed under the {fmt} license, and agree
+to future changes to the licensing.
+
+All C++ code must adhere to [Google C++ Style Guide](
+https://google.github.io/styleguide/cppguide.html) with the following
+exceptions:
+
+* Exceptions are permitted
+* snake_case should be used instead of UpperCamelCase for function and type
+ names
+
+All documentation must adhere to the [Google Developer Documentation Style
+Guide](https://developers.google.com/style).
+
+Thanks for contributing!
diff --git a/dep/fmt/CONTRIBUTING.rst b/dep/fmt/CONTRIBUTING.rst
deleted file mode 100644
index 506811d4..00000000
--- a/dep/fmt/CONTRIBUTING.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Contributing to fmt
-===================
-
-All C++ code must adhere to `Google C++ Style Guide
-`_ with the following
-exceptions:
-
-* Exceptions are permitted
-* snake_case should be used instead of UpperCamelCase for function names
-
-Thanks for contributing!
diff --git a/dep/fmt/ChangeLog.rst b/dep/fmt/ChangeLog.rst
index 1633bac7..9c171af0 100644
--- a/dep/fmt/ChangeLog.rst
+++ b/dep/fmt/ChangeLog.rst
@@ -1,12 +1,2547 @@
-4.0.1 - TBD
------------
+7.1.3 - 2020-11-24
+------------------
+
+* Fixed handling of buffer boundaries in ``format_to_n``
+ (`#1996 `_,
+ `#2029 `_).
+
+* Fixed linkage errors when linking with a shared library
+ (`#2011 `_).
+
+* Reintroduced ostream support to range formatters
+ (`#2014 `_).
+
+* Worked around an issue with mixing std versions in gcc
+ (`#2017 `_).
+
+7.1.2 - 2020-11-04
+------------------
+
+* Fixed floating point formatting with large precision
+ (`#1976 `_).
+
+7.1.1 - 2020-11-01
+------------------
+
+* Fixed ABI compatibility with 7.0.x
+ (`#1961 `_).
+
+* Added the ``FMT_ARM_ABI_COMPATIBILITY`` macro to work around ABI
+ incompatibility between GCC and Clang on ARM
+ (`#1919 `_).
+
+* Worked around a SFINAE bug in GCC 8
+ (`#1957 `_).
+
+* Fixed linkage errors when building with GCC's LTO
+ (`#1955 `_).
+
+* Fixed a compilation error when building without ``__builtin_clz`` or equivalent
+ (`#1968 `_).
+ Thanks `@tohammer (Tobias Hammer) `_.
+
+* Fixed a sign conversion warning
+ (`#1964 `_).
+ Thanks `@OptoCloud `_.
+
+7.1.0 - 2020-10-25
+------------------
+
+* Switched from `Grisu3
+ `_
+ to `Dragonbox `_ for the default
+ floating-point formatting which gives the shortest decimal representation
+ with round-trip guarantee and correct rounding
+ (`#1882 `_,
+ `#1887 `_,
+ `#1894 `_). This makes {fmt} up to
+ 20-30x faster than common implementations of ``std::ostringstream`` and
+ ``sprintf`` on `dtoa-benchmark `_
+ and faster than double-conversion and Ryū:
+
+ .. image:: https://user-images.githubusercontent.com/576385/
+ 95684665-11719600-0ba8-11eb-8e5b-972ff4e49428.png
+
+ It is possible to get even better performance at the cost of larger binary
+ size by compiling with the ``FMT_USE_FULL_CACHE_DRAGONBOX`` macro set to 1.
+
+ Thanks `@jk-jeon (Junekey Jeon) `_.
+
+* Added an experimental unsynchronized file output API which, together with
+ `format string compilation `_,
+ can give `5-9 times speed up compared to fprintf
+ `_
+ on common platforms (`godbolt `__):
+
+ .. code:: c++
+
+ #include
+
+ int main() {
+ auto f = fmt::output_file("guide");
+ f.print("The answer is {}.", 42);
+ }
+
+* Added a formatter for ``std::chrono::time_point``
+ (`#1819 `_,
+ `#1837 `_). For example
+ (`godbolt `__):
+
+ .. code:: c++
+
+ #include
+
+ int main() {
+ auto now = std::chrono::system_clock::now();
+ fmt::print("The time is {:%H:%M:%S}.\n", now);
+ }
+
+ Thanks `@adamburgess (Adam Burgess) `_.
+
+* Added support for ranges with non-const ``begin``/``end`` to ``fmt::join``
+ (`#1784 `_,
+ `#1786 `_). For example
+ (`godbolt `__):
+
+ .. code:: c++
+
+ #include
+ #include
+
+ int main() {
+ using std::literals::string_literals::operator""s;
+ auto strs = std::array{"a"s, "bb"s, "ccc"s};
+ auto range = strs | ranges::views::filter(
+ [] (const std::string &x) { return x.size() != 2; }
+ );
+ fmt::print("{}\n", fmt::join(range, ""));
+ }
+
+ prints "accc".
+
+ Thanks `@tonyelewis (Tony E Lewis) `_.
+
+* Added a ``memory_buffer::append`` overload that takes a range
+ (`#1806 `_).
+ Thanks `@BRevzin (Barry Revzin) `_.
+
+* Improved handling of single code units in ``FMT_COMPILE``. For example:
+
+ .. code:: c++
+
+ #include
+
+ char* f(char* buf) {
+ return fmt::format_to(buf, FMT_COMPILE("x{}"), 42);
+ }
+
+ compiles to just (`godbolt `__):
+
+ .. code:: asm
+
+ _Z1fPc:
+ movb $120, (%rdi)
+ xorl %edx, %edx
+ cmpl $42, _ZN3fmt2v76detail10basic_dataIvE23zero_or_powers_of_10_32E+8(%rip)
+ movl $3, %eax
+ seta %dl
+ subl %edx, %eax
+ movzwl _ZN3fmt2v76detail10basic_dataIvE6digitsE+84(%rip), %edx
+ cltq
+ addq %rdi, %rax
+ movw %dx, -2(%rax)
+ ret
+
+ Here a single ``mov`` instruction writes ``'x'`` (``$120``) to the output
+ buffer.
+
+* Added dynamic width support to format string compilation
+ (`#1809 `_).
+
+* Improved error reporting for unformattable types: now you'll get the type name
+ directly in the error message instead of the note:
+
+ .. code:: c++
+
+ #include
+
+ struct how_about_no {};
+
+ int main() {
+ fmt::print("{}", how_about_no());
+ }
+
+ Error (`godbolt `__):
+
+ ``fmt/core.h:1438:3: error: static_assert failed due to requirement
+ 'fmt::v7::formattable()' "Cannot format an argument.
+ To make type T formattable provide a formatter specialization:
+ https://fmt.dev/latest/api.html#udt"
+ ...``
+
+* Added the `make_args_checked `_
+ function template that allows you to write formatting functions with
+ compile-time format string checks and avoid binary code bloat
+ (`godbolt `__):
+
+ .. code:: c++
+
+ void vlog(const char* file, int line, fmt::string_view format,
+ fmt::format_args args) {
+ fmt::print("{}: {}: ", file, line);
+ fmt::vprint(format, args);
+ }
+
+ template
+ void log(const char* file, int line, const S& format, Args&&... args) {
+ vlog(file, line, format,
+ fmt::make_args_checked(format, args...));
+ }
+
+ #define MY_LOG(format, ...) \
+ log(__FILE__, __LINE__, FMT_STRING(format), __VA_ARGS__)
+
+ MY_LOG("invalid squishiness: {}", 42);
+
+* Replaced ``snprintf`` fallback with a faster internal IEEE 754 ``float`` and
+ ``double`` formatter for arbitrary precision. For example
+ (`godbolt `__):
+
+ .. code:: c++
+
+ #include
+
+ int main() {
+ fmt::print("{:.500}\n", 4.9406564584124654E-324);
+ }
+
+ prints
+
+ ``4.9406564584124654417656879286822137236505980261432476442558568250067550727020875186529983636163599237979656469544571773092665671035593979639877479601078187812630071319031140452784581716784898210368871863605699873072305000638740915356498438731247339727316961514003171538539807412623856559117102665855668676818703956031062493194527159149245532930545654440112748012970999954193198940908041656332452475714786901472678015935523861155013480352649347201937902681071074917033322268447533357208324319360923829e-324``.
+
+* Made ``format_to_n`` and ``formatted_size`` part of the `core API
+ `__
+ (`godbolt `__):
+
+ .. code:: c++
+
+ #include
+
+ int main() {
+ char buffer[10];
+ auto result = fmt::format_to_n(buffer, sizeof(buffer), "{}", 42);
+ }
+
+* Added ``fmt::format_to_n`` overload with format string compilation
+ (`#1764 `_,
+ `#1767 `_,
+ `#1869 `_). For example
+ (`godbolt `__):
+
+ .. code:: c++
+
+ #include
+
+ int main() {
+ char buffer[8];
+ fmt::format_to_n(buffer, sizeof(buffer), FMT_COMPILE("{}"), 42);
+ }
+
+ Thanks `@Kurkin (Dmitry Kurkin) `_,
+ `@alexezeder (Alexey Ochapov) `_.
+
+* Added ``fmt::format_to`` overload that take ``text_style``
+ (`#1593 `_,
+ `#1842 `_,
+ `#1843 `_). For example
+ (`godbolt `__):
+
+ .. code:: c++
+
+ #include
+
+ int main() {
+ std::string out;
+ fmt::format_to(std::back_inserter(out),
+ fmt::emphasis::bold | fg(fmt::color::red),
+ "The answer is {}.", 42);
+ }
+
+ Thanks `@Naios (Denis Blank) `_.
+
+* Made the ``#`` specifier emit trailing zeros in addition to the decimal point
+ (`#1797 `_). For example
+ (`godbolt `__):
+
+ .. code:: c++
+
+ #include
+
+ int main() {
+ fmt::print("{:#.2g}", 0.5);
+ }
+
+ prints ``0.50``.
+
+* Changed the default floating point format to not include ``.0`` for
+ consistency with ``std::format`` and ``std::to_chars``
+ (`#1893 `_,
+ `#1943 `_). It is possible to get
+ the decimal point and trailing zero with the ``#`` specifier.
+
+* Fixed an issue with floating-point formatting that could result in addition of
+ a non-significant trailing zero in rare cases e.g. ``1.00e-34`` instead of
+ ``1.0e-34`` (`#1873 `_,
+ `#1917 `_).
+
+* Made ``fmt::to_string`` fallback on ``ostream`` insertion operator if
+ the ``formatter`` specialization is not provided
+ (`#1815 `_,
+ `#1829 `_).
+ Thanks `@alexezeder (Alexey Ochapov) `_.
+
+* Added support for the append mode to the experimental file API and
+ improved ``fcntl.h`` detection.
+ (`#1847 `_,
+ `#1848 `_).
+ Thanks `@t-wiser `_.
+
+* Fixed handling of types that have both an implicit conversion operator and
+ an overloaded ``ostream`` insertion operator
+ (`#1766 `_).
+
+* Fixed a slicing issue in an internal iterator type
+ (`#1822 `_).
+ Thanks `@BRevzin (Barry Revzin) `_.
+
+* Fixed an issue in locale-specific integer formatting
+ (`#1927 `_).
+
+* Fixed handling of exotic code unit types
+ (`#1870 `_,
+ `#1932 `_).
+
+* Improved ``FMT_ALWAYS_INLINE``
+ (`#1878 `_).
+ Thanks `@jk-jeon (Junekey Jeon) `_.
+
+* Removed dependency on ``windows.h``
+ (`#1900 `_).
+ Thanks `@bernd5 (Bernd Baumanns) `_.
+
+* Optimized counting of decimal digits on MSVC
+ (`#1890 `_).
+ Thanks `@mwinterb `_.
+
+* Improved documentation
+ (`#1772 `_,
+ `#1775 `_,
+ `#1792 `_,
+ `#1838 `_,
+ `#1888 `_,
+ `#1918 `_,
+ `#1939 `_).
+ Thanks `@leolchat (Léonard Gérard) `_,
+ `@pepsiman (Malcolm Parsons) `_,
+ `@Klaim (Joël Lamotte) `_,
+ `@ravijanjam (Ravi J) `_,
+ `@francesco-st `_,
+ `@udnaan (Adnan) `_.
+
+* Added the ``FMT_REDUCE_INT_INSTANTIATIONS`` CMake option that reduces the
+ binary code size at the cost of some integer formatting performance. This can
+ be useful for extremely memory-constrained embedded systems
+ (`#1778 `_,
+ `#1781 `_).
+ Thanks `@kammce (Khalil Estell) `_.
+
+* Added the ``FMT_USE_INLINE_NAMESPACES`` macro to control usage of inline
+ namespaces (`#1945 `_).
+ Thanks `@darklukee `_.
+
+* Improved build configuration
+ (`#1760 `_,
+ `#1770 `_,
+ `#1779 `_,
+ `#1783 `_,
+ `#1823 `_).
+ Thanks `@dvetutnev (Dmitriy Vetutnev) `_,
+ `@xvitaly (Vitaly Zaitsev) `_,
+ `@tambry (Raul Tambre) `_,
+ `@medithe `_,
+ `@martinwuehrer (Martin Wührer) `_.
+
+* Fixed various warnings and compilation issues
+ (`#1790 `_,
+ `#1802 `_,
+ `#1808 `_,
+ `#1810 `_,
+ `#1811 `_,
+ `#1812 `_,
+ `#1814 `_,
+ `#1816 `_,
+ `#1817 `_,
+ `#1818 `_,
+ `#1825 `_,
+ `#1836 `_,
+ `#1855 `_,
+ `#1856 `_,
+ `#1860 `_,
+ `#1877 `_,
+ `#1879 `_,
+ `#1880 `_,
+ `#1896 `_,
+ `#1897 `_,
+ `#1898 `_,
+ `#1904 `_,
+ `#1908 `_,
+ `#1911 `_,
+ `#1912 `_,
+ `#1928 `_,
+ `#1929 `_,
+ `#1935 `_
+ `#1937 `_,
+ `#1942 `_,
+ `#1949 `_).
+ Thanks `@TheQwertiest `_,
+ `@medithe `_,
+ `@martinwuehrer (Martin Wührer) `_,
+ `@n16h7hunt3r `_,
+ `@Othereum (Seokjin Lee) `_,
+ `@gsjaardema (Greg Sjaardema) `_,
+ `@AlexanderLanin (Alexander Lanin) `_,
+ `@gcerretani (Giovanni Cerretani) `_,
+ `@chronoxor (Ivan Shynkarenka) `_,
+ `@noizefloor (Jan Schwers) `_,
+ `@akohlmey (Axel Kohlmeyer) `_,
+ `@jk-jeon (Junekey Jeon) `_,
+ `@rimathia `_,
+ `@rglarix (Riccardo Ghetta (larix)) `_,
+ `@moiwi `_,
+ `@heckad (Kazantcev Andrey) `_,
+ `@MarcDirven `_.
+ `@BartSiwek (Bart Siwek) `_,
+ `@darklukee `_.
+
+7.0.3 - 2020-08-06
+------------------
+
+* Worked around broken ``numeric_limits`` for 128-bit integers
+ (`#1787 `_).
+
+* Added error reporting on missing named arguments
+ (`#1796 `_).
+
+* Stopped using 128-bit integers with clang-cl
+ (`#1800 `_).
+ Thanks `@Kingcom `_.
+
+* Fixed issues in locale-specific integer formatting
+ (`#1782 `_,
+ `#1801 `_).
+
+7.0.2 - 2020-07-29
+------------------
+
+* Worked around broken ``numeric_limits`` for 128-bit integers
+ (`#1725 `_).
+
+* Fixed compatibility with CMake 3.4
+ (`#1779 `_).
+
+* Fixed handling of digit separators in locale-specific formatting
+ (`#1782 `_).
+
+7.0.1 - 2020-07-07
+------------------
+
+* Updated the inline version namespace name.
+
+* Worked around a gcc bug in mangling of alias templates
+ (`#1753 `_).
+
+* Fixed a linkage error on Windows
+ (`#1757 `_).
+ Thanks `@Kurkin (Dmitry Kurkin) `_.
+
+* Fixed minor issues with the documentation.
+
+7.0.0 - 2020-07-05
+------------------
+
+* Reduced the library size. For example, on macOS a stripped test binary
+ statically linked with {fmt} `shrank from ~368k to less than 100k
+ `_.
+
+* Added a simpler and more efficient `format string compilation API
+ `_:
+
+ .. code:: c++
+
+ #include
+
+ // Converts 42 into std::string using the most efficient method and no
+ // runtime format string processing.
+ std::string s = fmt::format(FMT_COMPILE("{}"), 42);
+
+ 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++
+ `_.
+
+* Optimized handling of small format strings. For example,
+
+ .. code:: c++
+
+ fmt::format("Result: {}: ({},{},{},{})", str1, str2, str3, str4, str5)
+
+ is now ~40% faster (`#1685 `_).
+
+* 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 of a test translation unit
+ dropped from 2.3s to 0.3s with ``-O2`` and from 0.6s to 0.3s with the default
+ settings (``-O0``).
+
+ Before (``-O2``)::
+
+ % time c++ -c test.cc -I include -std=c++17 -O2
+ c++ -c test.cc -I include -std=c++17 -O2 2.22s user 0.08s system 99% cpu 2.311 total
+
+ After (``-O2``)::
+
+ % time c++ -c test.cc -I include -std=c++17 -O2
+ c++ -c test.cc -I include -std=c++17 -O2 0.26s user 0.04s system 98% cpu 0.303 total
+
+ Before (default)::
+
+ % time c++ -c test.cc -I include -std=c++17
+ c++ -c test.cc -I include -std=c++17 0.53s user 0.06s system 98% cpu 0.601 total
+
+ After (default)::
+
+ % time c++ -c test.cc -I include -std=c++17
+ c++ -c test.cc -I include -std=c++17 0.24s user 0.06s system 98% cpu 0.301 total
+
+ It is still recommended to use ``fmt/core.h`` instead of ``fmt/format.h`` but
+ the compile time difference is now smaller. Thanks
+ `@alex3d `_ for the suggestion.
+
+* Named arguments are now stored on stack (no dynamic memory allocations) and
+ the compiled code is more compact and efficient. For example
+
+ .. code:: c++
+
+ #include
+
+ int main() {
+ fmt::print("The answer is {answer}\n", fmt::arg("answer", 42));
+ }
+
+ compiles to just (`godbolt `__)
+
+ .. code:: asm
+
+ .LC0:
+ .string "answer"
+ .LC1:
+ .string "The answer is {answer}\n"
+ main:
+ sub rsp, 56
+ mov edi, OFFSET FLAT:.LC1
+ mov esi, 23
+ movabs rdx, 4611686018427387905
+ lea rax, [rsp+32]
+ lea rcx, [rsp+16]
+ mov QWORD PTR [rsp+8], 1
+ mov QWORD PTR [rsp], rax
+ mov DWORD PTR [rsp+16], 42
+ mov QWORD PTR [rsp+32], OFFSET FLAT:.LC0
+ mov DWORD PTR [rsp+40], 0
+ call fmt::v6::vprint(fmt::v6::basic_string_view,
+ fmt::v6::format_args)
+ xor eax, eax
+ add rsp, 56
+ ret
+
+ .L.str.1:
+ .asciz "answer"
+
+* Implemented compile-time checks for dynamic width and precision
+ (`#1614 `_):
+
+ .. code:: c++
+
+ #include
+
+ int main() {
+ fmt::print(FMT_STRING("{0:{1}}"), 42);
+ }
+
+ now gives a compilation error because argument 1 doesn't exist::
+
+ In file included from test.cc:1:
+ include/fmt/format.h:2726:27: error: constexpr variable 'invalid_format' must be
+ initialized by a constant expression
+ FMT_CONSTEXPR_DECL bool invalid_format =
+ ^
+ ...
+ include/fmt/core.h:569:26: note: in call to
+ '&checker(s, {}).context_->on_error(&"argument not found"[0])'
+ if (id >= num_args_) on_error("argument not found");
+ ^
+
+* Added sentinel support to ``fmt::join``
+ (`#1689 `_)
+
+ .. code:: c++
+
+ struct zstring_sentinel {};
+ bool operator==(const char* p, zstring_sentinel) { return *p == '\0'; }
+ bool operator!=(const char* p, zstring_sentinel) { return *p != '\0'; }
+
+ struct zstring {
+ const char* p;
+ const char* begin() const { return p; }
+ zstring_sentinel end() const { return {}; }
+ };
+
+ auto s = fmt::format("{}", fmt::join(zstring{"hello"}, "_"));
+ // s == "h_e_l_l_o"
+
+ Thanks `@BRevzin (Barry Revzin) `_.
+
+* Added support for named arguments, ``clear`` and ``reserve`` to
+ ``dynamic_format_arg_store``
+ (`#1655 `_,
+ `#1663 `_,
+ `#1674 `_,
+ `#1677 `_).
+ Thanks `@vsolontsov-ll (Vladimir Solontsov)
+ `_.
+
+* Added support for the ``'c'`` format specifier to integral types for
+ compatibility with ``std::format``
+ (`#1652 `_).
+
+* Replaced the ``'n'`` format specifier with ``'L'`` for compatibility with
+ ``std::format`` (`#1624 `_).
+ The ``'n'`` specifier can be enabled via the ``FMT_DEPRECATED_N_SPECIFIER``
+ macro.
+
+* The ``'='`` format specifier is now disabled by default for compatibility with
+ ``std::format``. It can be enabled via the ``FMT_DEPRECATED_NUMERIC_ALIGN``
+ macro.
+
+* Removed the following deprecated APIs:
+
+ * ``FMT_STRING_ALIAS`` and ``fmt`` macros - replaced by ``FMT_STRING``
+ * ``fmt::basic_string_view::char_type`` - replaced by
+ ``fmt::basic_string_view::value_type``
+ * ``convert_to_int``
+ * ``format_arg_store::types``
+ * ``*parse_context`` - replaced by ``*format_parse_context``
+ * ``FMT_DEPRECATED_INCLUDE_OS``
+ * ``FMT_DEPRECATED_PERCENT`` - incompatible with ``std::format``
+ * ``*writer`` - replaced by compiled format API
+
+* Renamed the ``internal`` namespace to ``detail``
+ (`#1538 `_). The former is still
+ provided as an alias if the ``FMT_USE_INTERNAL`` macro is defined.
+
+* Improved compatibility between ``fmt::printf`` with the standard specs
+ (`#1595 `_,
+ `#1682 `_,
+ `#1683 `_,
+ `#1687 `_,
+ `#1699 `_).
+ Thanks `@rimathia `_.
+
+* Fixed handling of ``operator<<`` overloads that use ``copyfmt``
+ (`#1666 `_).
+
+* 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 Wesolowski)
+ `_.
+
+* Replaced ``FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION`` with the ``FMT_FUZZ``
+ macro to prevent interferring with fuzzing of projects using {fmt}
+ (`#1650 `_).
+ Thanks `@asraa (Asra Ali) `_.
+
+* Fixed compatibility with emscripten
+ (`#1636 `_,
+ `#1637 `_).
+ Thanks `@ArthurSonzogni (Arthur Sonzogni)
+ `_.
+
+* Improved documentation
+ (`#704 `_,
+ `#1643 `_,
+ `#1660 `_,
+ `#1681 `_,
+ `#1691 `_,
+ `#1706 `_,
+ `#1714 `_,
+ `#1721 `_,
+ `#1739 `_,
+ `#1740 `_,
+ `#1741 `_,
+ `#1751 `_).
+ Thanks `@senior7515 (Alexander Gallego) `_,
+ `@lsr0 (Lindsay Roberts) `_,
+ `@puetzk (Kevin Puetz) `_,
+ `@fpelliccioni (Fernando Pelliccioni) `_,
+ Alexey Kuzmenko, `@jelly (jelle van der Waa) `_,
+ `@claremacrae (Clare Macrae) `_,
+ `@jiapengwen (文佳鹏) `_,
+ `@gsjaardema (Greg Sjaardema) `_,
+ `@alexey-milovidov `_.
+
+* Implemented various build configuration fixes and improvements
+ (`#1603 `_,
+ `#1657 `_,
+ `#1702 `_,
+ `#1728 `_).
+ Thanks `@scramsby (Scott Ramsby) `_,
+ `@jtojnar (Jan Tojnar) `_,
+ `@orivej (Orivej Desh) `_,
+ `@flagarde `_.
+
+* Fixed various warnings and compilation issues
+ (`#1616 `_,
+ `#1620 `_,
+ `#1622 `_,
+ `#1625 `_,
+ `#1627