////
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Official repository: https://github.com/boostorg/website-v2-docs
////

== Version 1.92.0

boost_at:/doc/libs/1_92_0/[Documentation]

// Formatting reference: https://docs.asciidoctor.org/asciidoc/latest/syntax-quick-reference/
// Boost-specific macros: https://github.com/cppalliance/asciidoctor-boost?tab=readme-ov-file#macros
// Please keep the list of libraries sorted in lexicographical order.

== General Notes

* In previous releases, Windows `.dll` files were installed by `b2 install`
into the library directory (`<PREFIX>/lib` by default), except on Cygwin,
where they were installed into the binary directory (`<PREFIX>/bin` by default.)
+
This has been changed to consistently install `.dll` files into the binary
directory, which is the behavior most users want.
+
For compatibility, a new command line option, `--dlldir`, has been added
to `b2 install` so that the directory can be overridden, and if needed,
pointed to `<PREFIX>/lib`.

* The CMake configuration file installed by `b2 install` has been updated
to support requesting header-only libraries as `find_package` components.
+
That is, something like `find_package(Boost REQUIRED COMPONENTS mp11)` works
now (and defines the target `Boost::mp11`), whereas previously it did not
(only compiled libraries were considered components).
+
This matches the behavior of the CMake configuration files installed by
building Boost with CMake, making it possible to consume Boost in the same
way regardless of how it was built and installed.
+
As part of this regularization, the little used feature of requesting
`COMPONENTS ALL` has been removed. It's not supported by the CMake Boost
build, and was never supported by `FindBoost`.

== New Libraries

// Example:
// 
// * boost_phrase:library[Accumulators,/libs/accumulators]:
// ** Framework for incremental calculation, and collection of statistical
// accumulators, from Eric Niebler.

== Updated Libraries

// Example:
//  
// * boost_phrase:library[Interprocess,/libs/interprocess/]:
// ** Added anonymous shared memory for UNIX systems.
// ** Conform to `std::pointer_traits` requirements (boost_gh:pr[interprocess,32]).
// ** Fixed `named_condition_any` fails to notify (boost_gh:issue[interprocess,62]).

* boost_phrase:library[Assert,/libs/assert/]:
** Fix `BOOST_VERIFY` in the rare case of both `BOOST_ENABLE_ASSERT_HANDLER` and `BOOST_ENABLE_ASSERT_DEBUG_HANDLER` being defined.

* boost_phrase:library[Beast,/libs/beast/]:
** `websocket::stream` accepts close code 1014 (bad gateway).
** `http::basic_parser` ignores connection and framing fields in trailers.
** `http::parser` drops framing and connection-control fields carried in trailers.
** `http::basic_parser` rejects chunked transfer-encoding in HTTP/1.0 requests.
** `http::basic_parser` rejects `Content-Length` with `Transfer-Encoding` regardless of field order.
** `http::basic_parser` rejects requests with a `Transfer-Encoding` that does not end in chunked.
** `http::basic_parser` validates quoted-strings in chunk extensions.
** `http::message::prepare_payload` rejects 1xx responses with a body.
** `websocket::stream` rejects 64-bit frame lengths with the high bit set.
** File operations clear the `error_code` on success.
** The `server-flex-awaitable` example dispatches cancellation to the task's strand.
** Removed dependency on Boost.Functional.

* boost_phrase:library[Charconv,/libs/charconv/]:
** Added CUDA support allowing both `to_chars` and `from_chars` for integers to be used in CUDA kernels
** Fixed support for Clang on PPC64LE as it keeps `long double` and `__float128` as distinct types which was previously considered invalid via `static_assert`

* boost_phrase:library[ContainerHash,/libs/container_hash/]:
** Hashing a valueless `std::variant` instance no longer throws.

* boost_phrase:library[Container,/libs/container/]:
** Added new `boost::container::hub` container designed by Joaquín M. López Muñoz.
+
See the Hub Container chapter in the Container documentation for more information.
** Fixed bugs/issues:
*** Wrong overload resolution protection in implementation of P2363R5 (boost_gh:issue[container,334]).
*** Compile error with `erase` and `small_vector<std::string>` (boost_gh:issue[container,336]).
*** `uses_allocator_construction.hpp`: missing `#include .../config_end.hpp` (boost_gh:issue[container,338]).
** Added `unchecked_emplace_back` and `unchecked_push_back` to `boost::container::vector`, `boost::container::static_vector`, and `boost::container::small_vector`.
** Implemented pass:[C++23] https://wg21.link/P1518[P1518] change: modified allocator-extended constructors for all containers so that the deduction guides for containers are not overconstrained.

* boost_phrase:library[Conversion,/libs/conversion/]:
** C++20 Module `boost.conversion` was implemented. Many thanks to https://github.com/fdr400[Fedor Osetrov] for the PR (boost_gh:pr[conversion,43])!

* boost_phrase:library[Decimal,/libs/decimal/]:
** Added initial CUDA support allowing `decimal32_t`, `decimal64_t`, and `decimal128_t` to be used in CUDA kernels
** Added `decompose` function which returns the significand, exponent, and sign without normalization (i.e. in their current cohort)

* boost_phrase:library[DLL,/libs/dll/]:
** Fixed `smart_library` constructors from `shared_library` (boost_gh:pr[dll,114]). Many thanks to https://github.com/stima[R. Savchenko] for the PR!
** C++20 Module `boost.dll` was implemented. Many thanks to https://github.com/fdr400[Fedor Osetrov] for the PRs (boost_gh:pr[dll,110], boost_gh:pr[dll,111], boost_gh:pr[dll,112])!

* boost_phrase:library[Filesystem,/libs/filesystem/]:
** Marked templated versions of `initial_path` as deprecated and removed from *v4*. Use the non-templated versions instead.
** Use `readdir` instead of `readdir_r` on more POSIX platforms, specifically on Mac OS and other Apple operating systems,
   FreeBSD, OpenBSD, DragonFly BSD, NetBSD, QNX 6.0 and later, Solaris 10 and later and Illumos-based systems. Solaris users
   with gcc are recommended to define `__SunOS_5_x` macros according to their target Solaris version (e.g. `__SunOS_5_11`)
   when building Boost. (boost_gh:issue[filesystem,349])
** Support for platforms with non-thread-safe `readdir` is deprecated and will be removed in a future release. Although not
   required until https://pubs.opengroup.org/onlinepubs/9799919799/functions/readdir.html[POSIX.1-2024], on modern systems
   `readdir` is thread-safe when used with separate `DIR` objects in different threads and on some systems `readdir_r` is
   marked as deprecated. POSIX.1-2024 has been updated accordingly and also marked `readdir_r` as obsolescent, with a planned
   removal in a future version of the specification.
** On POSIX platforms, handle `EINTR` error code returned from `opendir`, `readdir` and equivalents. Although not documented,
   this error code, reportedly, may be returned on Apple operating systems and some BSD systems.

* boost_phrase:library[Geometry,/libs/geometry/]:
** Improvements (`geometry`):
*** Drop `varray` implementation in favor of Boost.Container `static_vector` (boost_gh:pr[geometry,1458]).
*** Refactor/reduce misc boost dependencies (boost_gh:pr[geometry,1459]).
*** Improve short-distance accuracy of Andoyer inverse (boost_gh:pr[geometry,1461]).
** Solved issues (`geometry`):
*** Unit test `index_rtree_exceptions_rst` fails (boost_gh:issue[geometry,1399]).
*** Performance regression on GCC (boost_gh:issue[geometry,1452]).
*** Missing citation guidelines (boost_gh:issue[geometry,714]).
*** Two almost identical rectangles have no intersection (boost_gh:issue[geometry,1471]).
*** Various fixes of errors and warnings.

* boost_phrase:library[Graph,/libs/graph/]:
** Added a Louvain community detection algorithm for modularity-based clustering (boost_gh:pr[graph,453]).
** Removed the dependency on Boost.StaticAssert (boost_gh:pr[graph,450]).
** Fixed bugs and correctness issues:
*** Corrected the types used in `adjacency_list` serialization (boost_gh:pr[graph,443]).
*** Initialized `edge_property_type` in `adjacency_list.hpp` (boost_gh:pr[graph,505]).
*** Fixed a wrong accessor return type (boost_gh:pr[graph,504]).
** Modernized types and hygiene:
*** Added missing `const` qualifiers and replaced `typedef` with `using` in several headers (boost_gh:pr[graph,508]).
*** Removed narrowing conversions in `random.hpp`, `bandwidth.hpp`, and `king_ordering.hpp` (boost_gh:pr[graph,497], boost_gh:pr[graph,498], boost_gh:pr[graph,499]).
*** Replaced deprecated `std::random_shuffle` with `std::shuffle` (boost_gh:pr[graph,513]).
*** Silenced `-Wunused-*` warnings and removed dead test variables (boost_gh:pr[graph,510], boost_gh:pr[graph,511], boost_gh:pr[graph,512]).
*** Cleared GCC `-Wsign-compare` warnings (boost_gh:pr[graph,514]).
** Documentation: updated the entire documentation and migrated to a new visual design (boost_gh:pr[graph,469], boost_gh:pr[graph,491], boost_gh:pr[graph,509], boost_gh:pr[graph,517], boost_gh:pr[graph,519]).

* boost_phrase:library[Hash2,/libs/hash2/]:
** Added built-in support for `std::optional`
** Added built-in support for `std::variant`, `std::monostate`

* boost_phrase:library[Heap,/libs/heap/]:
** This release is the last to support pass:[C++14]. Future releases will require pass:[C++17].

* boost_phrase:library[ICL,/libs/icl/]:
** Starting with version 22, pass:[libc++] has changed some lookup algorithms of its associative containers
in a way that breaks ICL's assumptions and behavior. The library internals
have been refactored to solve the problem and make ICL robust against future decisions of
the pass:[C++] committee regarding non-heterogeneous lookup for associative containers
(boost_gh:pr[icl,54], https://cplusplus.github.io/LWG/issue4572[LWG4752]).
** Fixed pass:[C++20]-related problems with `std::iter_value_t<element_iterator>` and GCC 10-12's
handling of rewritten relational operators (boost_gh:pr[icl,54]).
** Fixed a GCC 10-11 codegen bug (boost_gh:pr[icl,54]).

* boost_phrase:library[Interprocess,/libs/interprocess/]:
** Fixed bugs:
*** AIX build fix: fix return type in `get_invalid_systemwide_thread_id` (boost_gh:pr[interprocess,280]).
*** Locks in `message_queue_t` cover more code than intended (boost_gh:issue[interprocess,281]).

* boost_phrase:library[Iterator,/libs/iterator/]:
** Added `is_*_iterator_v` variable templates in pass:[C++14] and later, equivalent to the corresponding
   iterator traits.
** The `distance` and `advance` algorithms are now constrained by requiring `is_iterator` to return `true`
   for the iterator arguments. (boost_gh:pr[iterator,96])

* boost_phrase:library[LexicalCast,/libs/lexical_cast/]:
** C++20 Module `boost.lexical_cast` was implemented. Many thanks to https://github.com/fdr400[Fedor Osetrov] for the PR (boost_gh:pr[lexical_cast,96])!

* boost_phrase:library[Lockfree,/libs/lockfree/]:
** This release is the last to support pass:[C++14]. Future releases will require pass:[C++17].
** Added new `boost::lockfree::mpsc_weak_queue`, a multi-producer, single-consumer queue.
   While `push` and `pop` are individually wait-free, the queue is not linearizable
   and a producer that stalls between exchanging the tail and linking its node can
   permanently break the queue, so it is not strictly lock-free.
** Added new `boost::lockfree::bounded_ticket_queue`, a ringbuffer-based bounded MPMC
   queue. The queue is linearizable and wait-free when configured with a single producer
   and single consumer. In multi-producer or multi-consumer configurations, a stalled
   thread that has claimed a slot can block progress, so the queue is not strictly
   lock-free.

* boost_phrase:library[Math,/libs/math/]:
** Added a degree of freedom finder to the Student's T and Non-centeral F disributions
** Fixed CUDA compilation where host functions were invalidly being marked as device during compilation
** Increased testing coverage of distributions leading to several overflow fixes

* boost_phrase:library[Mp11,/libs/mp11/]:
** Improved the performance of a number of algorithms (contributed by Jonathan Poelen)

* boost_phrase:library[MSM,/libs/msm/]:
** New features (`backmp11`):
*** Provide an observer API for logging support (https://github.com/boostorg/msm/issues/220[#220])
*** Forward Kleene events to actions and guards without conversion (https://github.com/boostorg/msm/issues/229[#229])
*** Ensure basic exception guarantee and propagate exceptions to the caller (https://github.com/boostorg/msm/issues/221[#221])
*** Provide a reflection API and serialization support for Boost.Serialization, Boost.JSON and nlohmann/json (https://github.com/boostorg/msm/issues/197[#197])
*** Rework terminate and interrupt state handling and provide a `machine_state` enum (https://github.com/boostorg/msm/issues/244[#244])
*** Configurable event pool and inline storage (https://github.com/boostorg/msm/issues/239[#239])
*** API reference and examples are now available
** Bug fixes (`backmp11`):
*** State machine processes events although it is not running (https://github.com/boostorg/msm/issues/198[#198])
** **Breaking changes (`backmp11`)**:
*** Events in `process_event(...)` are not enqueued automatically anymore to reduce memory footprint, use `enqueue_event(...)` in actions (https://github.com/boostorg/msm/issues/178[#178])
*** The back-end does not forward constructor arguments to the front-end anymore, it must be default-constructible. To use custom constructors, define them in the back-end (https://github.com/boostorg/msm/issues/232[#232])
*** The deprecated APIs `process_queued_events()` and `process_single_queued_event()` are removed, use `process_event_pool(...)` instead
*** The default active state switch policy is set to "after source exit" in compliance to the UML specification. The other options are not UML-compliant and will be removed (https://github.com/boostorg/msm/issues/222[#222])
*** The back-end uses its own `process_result` type with new enum values instead of aliasing the enum of the `back` namespace. The old enum values are deprecated (https://github.com/boostorg/msm/issues/242[#242]) and will be removed
** fix(back, back11): Infinite recursion with event deferral in orthogonal regions (regression from 1.78) (https://github.com/boostorg/msm/issues/184[#184])

* boost_phrase:library[MultiIndex,/libs/multi_index/]:
** Fancy pointer support has been extended so that `multi_index_container` iterators now store
  references to the elements through the allocator's pointer type. In particular, this means that
  iterators can now be placed in shared memory using 
  boost_at:/libs/interprocess[Boost.Interprocess] allocators. 
** Fixed a performance issue with hashed indices when rehashing at very large container
  sizes (boost_gh:pr[multi_index,94]). Contributed by Daniel Kr&aacute;l.

* boost_phrase:library[Multiprecision,/libs/multiprecision/]:
** Added `data()` member function to float128 to match the rest of the library
** Fixed issue blocking compilation of constexpr expression templates with Clang

* boost_phrase:library[MySQL,/libs/mysql/]:
** Added a way to configure which character set the server uses by default,
   to make tracking more intelligent. This can be used to avoid redundant `SET NAMES` statements.
   See `pool_params::charset_strategy` and `connect_params::server_default_charset`
   (boost_gh:pr[mysql,511]).
** Reduces `pool_params::ping_interval`'s default from 1h to 10s.
   This improves the detection of broken connections
   (boost_gh:pr[mysql,512]).
** The read buffer has been optimized by reducing the frequency of data rotations
   when incomplete messages are received (boost_gh:pr[mysql,501]).
   Contributed by `@vsoulgard`.
** TLS certificates for CI testing are now generated dynamically, rather than
   being committed into the repository. This cleans up reports raised by vulnerability scanners
   (boost_gh:pr[mysql,505]).

* boost_phrase:library[PFR,/libs/pfr/]:
** C++20 Module `boost.pfr` is now also tested with and without `import std`. Many thanks to https://github.com/fdr400[Fedor Osetrov] for the PR (boost_gh:pr[pfr,233])!

* boost_phrase:library[PolyCollection,/libs/poly_collection/]:
** Made ``__variant_collection_value_type_impl__<Ts\...>``'s relational operators available only when
   the corresponding relational operator is available for all ``Ts\...``, in accordance with WG21 paper
   https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2944r3.html[P2944R3].
** Fixed incompatibility problem with libc++ v21 or higher (boost_gh:pr[poly_collection,34]). 

* boost_phrase:library[Redis,/libs/redis/]:
** Fixed a case of undefined behavior within `connection`
   when attempting to cancel a request that has completed, but whose handler
   hasn't been called yet. This happened due to an incorrect erase-remove use
   with a `std::deque` (boost_gh:pr[redis,428]). Contributed by `@L0rentz`.
** Optimized buffer rotations to reduce CPU consumption
   when many small messages arrive in a single network packet
   (boost_gh:pr[redis,415]).
** Added initializers to all members in the `config` struct.
   This allows using designated initializers to create `config` objects
   (boost_gh:pr[redis,424]).
** Removed the standalone workflow from the CMake.
   This was an undocumented way of consuming Boost.Redis with CMake aimed
   to internal development (boost_gh:pr[redis,409]).

* boost_phrase:library[Stacktrace,/libs/stacktrace/]:
** C++20 Modules were implemented:
*** `boost.stacktrace_dump` module for safe_dump interface
*** `boost.stacktrace_<backend>` module for each unwind/collect implementation method
*** `boost.stacktrace` module exposing best available backend implementation.
   Many thanks to https://github.com/fdr400[Fedor Osetrov] for the PRs (boost_gh:pr[stacktrace,230], boost_gh:pr[stacktrace,227])!
** C++20 Module `boost.stacktrace` is now also tested with and without `import std`. Many thanks to https://github.com/fdr400[Fedor Osetrov] for the PR (boost_gh:pr[stacktrace,231])!
** Fixed `Boost::from_exception` link on MinGW.  Many thanks to https://github.com/orgads[Orgad Shaneh] for the PR (boost_gh:pr[stacktrace,225])!

* boost_phrase:library[System,/libs/system/]:
** Fix `unwrap_and_invoke` for functions returning `void`.

* boost_phrase:library[TypeIndex,/libs/type_index/]:
** C++20 Module `boost.type_index` is now also tested with and without `import std`. Many thanks to https://github.com/fdr400[Fedor Osetrov] for the PR (boost_gh:pr[type_index,47])!

* boost_phrase:library[Unordered,/libs/unordered/]:
** Added interoperability with pass:[C++20] ranges to all the containers in the library:
   `insert_range` (plus `insert_range_(or|and)_[c]visit` for concurrent containers), 
   `std::from_range` construction and associated CTAD deduction guides. The
   `boost::unordered::from_range` construction tag is provided as an alternative to pass:[C++23]
   `std::from_range` or when this is not available.
** Fixed a performance issue with closed-addressing containers when rehashing at very large
   container sizes (boost_gh:pr[unordered,348]). Contributed by Daniel Kr&aacute;l.

* boost_phrase:library[URL,/libs/url/]:
** Fixed a heap buffer overflow in `normalize_path` for authority-less URLs whose normalized path begins with `//` (boost_gh:pr[url,995]).
** Fixed an uninitialized read in `ipv6_address_rule` when an embedded IPv4 address has no preceding `h16`, e.g. `https://[::.` (boost_gh:pr[url,994]).
** Fixed unsigned-integer-overflow sanitizer findings in case-insensitive comparisons, hashing, and `format` (boost_gh:pr[url,994]).
** Fixed decoded query-size tracking in `url_base::edit_params` (boost_gh:pr[url,990]).
** Third-round security review fixes: `url_view` copy from a null source, two incorrect `noexcept` specifiers, and decoded-length tracking when iterating segments in reverse (boost_gh:pr[url,988]).

* boost_phrase:library[Wave,/libs/wave/]:
** Introduce digit separators (pass:[C++14]), `module` keyword (pass:[C++20]), and `size_t` literals (pass:[C++23]).
** Fixed bugs.
*** `find_include_file` incorrectly accepts directories as include files (boost_gh:issue[wave,243]).
*** Predefined macros (`+++__FILE__+++`, `+++__LINE__+++`, `+++__INCLUDE_LEVEL__+++`) are expanded twice when `expanding_object_like_macro` returns `true` (boost_gh:issue[wave,246]).

== Updated Tools

* boost_phrase:library[B2,/tools/build/]:
** Includes release of https://www.boost.org/tools/build/doc/html/#_version_5_5_3[B2 version 5.5.3].

== Compilers Tested

// Edit this section as appropriate

Boost's primary test compilers are:

* Linux:
** Clang, C++03: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
** Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.0.0
** Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
** Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
** Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
** GCC, C++03: 4.6.3, 11, 12
** GCC, C++11: 4.7.3, 4.8.5, 11, 12
** GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12
** GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12
** GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12
* OS X:
** Apple Clang, C++03: 11.0.3
** Apple Clang, C++11: 11.0.3
** Apple Clang, C++14: 11.0.3
** Apple Clang, C++17: 11.0.3
** Apple Clang, C++20: 11.0.3
* Windows:
** Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2, 14.3

== Acknowledgements

// Edit this section as appropriate

Marshall Clow, Glen Fernandes and Ion Gaztañaga managed this release.
