//// 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.90.0 boost_at:/doc/libs/1_90_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. == New Libraries // Example: // // * boost_phrase:library[Accumulators,/libs/accumulators]: // ** Framework for incremental calculation, and collection of statistical // accumulators, from Eric Niebler. * boost_phrase:library[OpenMethod,/libs/openmethod]: ** Open-(multi-)methods in C++17 and above, from Jean-Louis Leroy. == 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[Asio,/libs/asio/] ** Added the `execution::inline_exception_handling` property to describe what exception handling guarantees are made when execution occurs inline. ** Added `inline_executor`, which always executes the submitted function inline. ** Changed the default candidate executor for `associated_executor` from `system_executor` to `inline_executor`. ** Added the `inline_or_executor<>` adapter and `inline_or()` helper, which will execute inline if possible and otherwise delegate to another executor. ** Added overloads of `dispatch`, `post` and `defer` that take a function object to be run on the target executor, and deliver the result to the completion handler. ** Added the `redirect_disposition` completion token adapter, as a generic counterpart for `redirect_error`. ** Annotated deprecated items with the `+++[[+++deprecated+++]]+++` attribute. ** Added a new configuration parameter "reactor" / "reset_edge_on_partial_read", which determines whether a partial read consumes the edge when using `epoll`. ** Added new configuration parameters "reactor" / "use_eventfd" and "reactor" / "use_timerfd" that are used to determine whether the `epoll` backend uses `eventfd` and `timerfd` respectively. ** Added the missing preprocessor check for `BOOST_ASIO_DISABLE_TIMERFD`. ** Implemented a compile-time feature check for `std::source_location` support, in addition to `std::experimental::source_location`. ** Stopped using the deprecated `boost::array::c_array()` function. ** Fixed a resource leak in `asio::awaitable` move assignment. ** Fixed a memory leak in `ssl` stream move assignment. ** Fixed a thread sanitizer issue in `kqueue` reactor. ** Fixed handler tracking arguments in `io_uring` backend. ** Fixed an unused parameter warning in `boost::asio::detail::null_thread`. ** Changed the macro-based coroutine implementation to ensure deterministic case labels when `+++__+++COUNTER+++__+++` is used. ** Fixed synchronous SSL stream `shutdown` to remap `error::eof` as `async_shutdown` does. ** Changed `stream_file` and `random_access_file` on Windows to treat file paths as UTF-8 encoded strings. ** Added checks to `experimental::parallel_group` and `experimental::ranged_parallel_group` to detect empty operation sets. ** Removed workaround for `_FORTIFY_SOURCE`, added address length checking to `ip::basic_resolver_results`. ** Fixed `experimental::coro` to have protection against `max` as a macro. ** Updated detection of `std::aligned_alloc` for newer `libc++` versions. ** Various documentation fixes and improvements. ** Consult the boost_at:/doc/libs/1_90_0/doc/html/boost_asio/history.html[Revision History] for further details. * boost_phrase:library[Beast,/libs/beast/]: ** `http::parser` rejects non-standard trailer fields by default. ** `http::basic_parser` uses a dedicated callback for trailer fields. ** `http::field` constants are updated. ** Fixed allocator move/copy assignment in `flat_buffer` and `multi_buffer`. ** Fixed websocket permessage-deflate error on partial message consumption. ** `http::buffer_body` ignores empty chunks. ** Added `http::basic_fields::contains` member function. ** Removed dependency on Boost.Preprocessor and Boost.StaticAssert. * boost_phrase:library[Bloom,/libs/bloom/]: ** Added bulk-mode insertion and lookup for increased performance. ** Made lookup implementation branchless for `block`, `fast_multiblock32` and `fast_multiblock64`, which results in some performance gains, particularly for mixed successful/unsuccessful queries. * boost_phrase:library[Charconv,/libs/charconv/]: ** Fixed quadmath detection in CMake for cross-compilation. ** Fixed an issue where a sufficiently big buffer would error as not large enough in floating point `to_chars`. * boost_phrase:library[Compat,/libs/compat/]: ** Added `to_underlying.hpp` (contributed by Braden Ganetsky.) * boost_phrase:library[Container,/libs/container/]: ** Reimplemented `deque`. The original implementation was based on the SGI's original data structure (similar to libstdc++). Main changes: *** `sizeof(deque)` was 10 words, now is 4 words. Probably the lightest implementation around. *** `sizeof(deque::iterator)` was 4 words, now is is 2 words (similar to libc++ and MSVC).) *** Several internal algorithms were reimplemented to speed up the segmented nature of deque. *** Defaults were slightly changed, 64 bit platforms now use 1024 byte blocks by default instead of classic SGI 512 byte blocks. *** The new implementation eases further deque-like variations and optimizations in the future. ** Fixed bugs/issues: *** https://github.com/boostorg/container/issues/248[GitHub #248: "flat_map slow insertion introduced in boost-1.80.0"]. *** https://github.com/boostorg/container/issues/254[GitHub #254: "C++20 std::erase_if"]. *** https://github.com/boostorg/container/issues/293/[GitHub #293: "UBSAN reports unaligned access error"]. *** https://github.com/boostorg/container/pull/294[GitHub #294: "CMake: Add option to use header-only Boost::container"]. *** https://github.com/boostorg/container/issues/300[GitHub #300: "Warnings when building with Clang 20"]. *** https://github.com/boostorg/container/issues/304[GitHub #304: "Usage of boost::container::small_vector with custom allocator"]. *** https://github.com/boostorg/container/pull/305[GitHub #305: "Warnings with -Wstrict-prototypes"]. *** https://github.com/boostorg/container/pull/307[GitHub #307: "Fix all instances of MSVC warning C4146 (unsigned negation)"]. *** https://github.com/boostorg/container/issues/309[GitHub #309: "Performance regression of boost::container::static_vector introduced in boost v1.86"]. *** https://github.com/boostorg/container/issues/306[GitHub #306: "new_allocator.hpp error: '__cpp_sized_deallocation' is not defined, evaluates to 0 [-Werror,-Wundef]"]. *** https://github.com/boostorg/container/issues/310[GitHub #310: "flat_map: Mention correct type in documentation of emplace and emplace_hint"]. *** https://github.com/boostorg/container/issues/312[GitHub #312: "flat_map std::allocator::is_always_equal is deprecated"]. *** https://github.com/boostorg/container/pull/317/[GitHub #317: "Partial revert of changes for Issue #209 - compiler warnings"]. *** https://github.com/boostorg/container/pull/321/[GitHub #321: "devector does not work with pmr allocators"]. * boost_phrase:library[Conversion,/libs/conversion/]: ** Dropped dependency on Boost.SmartPtr. * boost_phrase:library[Core,/libs/core/]: ** The implementation of `BOOST_TEST_THROWS` and `BOOST_TEST_NO_THROW` macros defined in `boost/core/lightweight_test.hpp` has been changed to avoid compiler warnings on some compilers, when the macros are used in `if`/`else` blocks. As a side effect of this change, the semicolon after the macro is now necessary. (boost_gh:pr[core,205]) ** `boost::data` and `boost::size` are now aliases for `std::data` and `std::size`, respectively, when the latter are provided by compiler. This resolves potential ambiguities when both `boost::` and `std::` alternatives are found by the compiler, e.g. as a result of ADL. (boost_gh:pr[core,206]) * boost_phrase:library[DLL,/libs/dll/]: ** Fixed issues with `std::error_code` being passed to `boost::system::error_code&`. Many thanks to https://github.com/0-wiz-0[Thomas Klausner] for the fix (boost_gh:pr[dll,106]). ** Fixed install with CMake. Many thanks to https://github.com/yurybura[Yury Bura] for the fix (boost_gh:pr[dll,103]). ** Fixed `size` variable shadowing. * boost_phrase:library[DynamicBitset,/libs/dynamic_bitset/]: ** Added C++20 iterators. ** Allowed choosing the underlying container type. ** Added constexpr support when compiling as C++20 or later. ** Made push_back(), pop_back() and lowest_bit() more efficient. ** Made the constructor from basic_string explicit. ** Removed several dependencies. ** Added push_front(), pop_front(), find_first_off(), find_next_off() and constructors from C-style strings and basic_string_view (the latter in C++17 or later). ** Changed the stream inserter to set badbit if an exception is thrown during output. ** Made the stream extractor rethrow any exception coming from the underlying vector. ** Ported the documentation to MrDocs and Antora. * boost_phrase:library[Filesystem,/libs/filesystem/]: ** Clear passed `error_code` argument on successful completion of the `permissions` operation. (boost_gh:pr[filesystem,338]) ** On Windows, added a workaround for `directory_iterator` constructor failing with an "Invalid Signature" error for a Samba 3.0.2 share, when SMB signing is required. (boost_gh:issue[filesystem,334]) * boost_phrase:library[Flyweight,/libs/flyweight/]: ** Fixed compile errors in Clang 19 and later due to https://wg21.link/p0522r0[P0522R0] support. * boost_phrase:library[Geometry,/libs/geometry/]: ** Major improvements *** https://github.com/boostorg/geometry/pull/1409[GitHub #1409: "Implement is_valid algorithm for polyhedral surfaces"]. ** Improvements *** https://github.com/boostorg/geometry/pull/1413[GitHub #1413: "Add supported combinations for convert"]. *** https://github.com/boostorg/geometry/pull/1417[GitHub #1417: "Improved documentation"]. *** https://github.com/boostorg/geometry/pull/1423[GitHub #1423: "Avoid stack overflow in traverse"]. ** Solved issues *** https://github.com/boostorg/geometry/issues/1006[GitHub #1006: "bg::projections::detail::epsg_to_parameters causes excessive compile times"]. *** Various fixes of errors and warnings * boost_phrase:library[GIL,/libs/gil/]: ** Improvements *** https://github.com/boostorg/gil/pull/773[GitHub #773: "Improved documentation (histogram and typos). Fixed the build for latest sphinx version."]. ** Solved issues *** https://github.com/boostorg/gil/pull/778[GitHub #778: "Fixed build with Clang"]. * boost_phrase:library[Interprocess,/libs/interprocess/]: ** Minor documentation fixes. ** Fixed bugs: *** https://github.com/boostorg/interprocess/pull/245[GitHub #245: "Fix UBSan runtime error (load of 'boost::interprocess::mode_t')"]. *** https://github.com/boostorg/interprocess/pull/269[GitHub #269: "Minor documentation fixes and template parameter renames"]. * boost_phrase:library[JSON,/libs/json/]: ** Removed dependencies on Boost.Align and Boost.StaticAssert. ** Switched to a faster hashing algorithm. * boost_phrase:library[LexicalCast,/libs/lexical_cast/]: ** More tests and fixes for floating-point special value conversions to integers and bool. Fixes compiler warning C4804 when lexical casting from `float` to `bool`. ** Dropped dependency to Boost.TypeTraits. Many thanks to https://github.com/Romain-Geissler-1A[Romain Geissler] for implementing the major part of the work (boost_gh:pr[lexical_cast,87]). ** Switch from implicit to explicit type conversion to avoid compiler warnings. Many thanks to https://github.com/bmagistro[bmagistro] for the PR (boost_gh:pr[lexical_cast,85]). ** Fixed mistakes in documentation. Many thanks to https://github.com/ivanpanch[ivanpanch] for the PR (boost_gh:pr[lexical_cast,86]). ** Fixed regression in `unsigned short` to `wstring` casting without `wchar_t` builtin type. * boost_phrase:library[Locale,/libs/locale/]: ** Fixed B2 build files to avoid building dynamic versions of various Boost libraries when only static ones are requested (boost_gh:pr[locale,266]). ** When ISO8859-1 or ISO8859-8 encoding is requested, allow using Windows codepages 1252 or 1255, respectively, instead of using the "C" (classic) locale when the selected Windows locale doesn't support that ISO8859 encoding. ** Enabled a workaround for an issue in Cygwins stdlib when converting some long UTF-8 sequences to UTF-16. * boost_phrase:library[Log,/libs/log/]: ** Fixed a missed optimization in `value_ref` visitation. ** Fixed a possible long and useless loop on log file rotation in `text_file_backend`. If the log file name pattern did not include a file counter and the log file size exceeded the `rotation_size` limit, then the sink backend would repeatedly try to open a new log file with a different counter value and end up opening the same file every time. (boost_gh:issue[log,252]) ** Made file size checks more robust against integer overflows in `text_file_backend`. * boost_phrase:library[Math,/libs/math/]: ** Added new sub-library: Reverse-Mode Automatic Differentiation. ** Added new constant: `log_pi`. ** Added proper promotion policy support to `logit`, `logistic_sigmoid`, and `logistic` distributions. ** Numerous fixes and edge case repairs to the special functions. * boost_phrase:library[Mp11,/libs/mp11/]: ** Updated `mp_reverse_fold` to work on fixed size lists * boost_phrase:library[MQTT5,/libs/mqtt5/]: ** Removed dependency on Boost.Spirit. ** Auto-reconnection now triggers on any transport-layer error instead of a limited whitelist (boost_gh:issue[mqtt5,38]). ** Added `at_transport_error` callback to the Logger interface. * boost_phrase:library[MSM,/libs/msm/]: ** Refurbished and updated the documentation to use Antora. ** Added a new back-end `backmp11` offering heavily reduced compile times, a refactored API and a couple of new features. Requires {cpp}17, more details are available in the documentation. ** Fixed bug https://github.com/boostorg/msm/issues/87[GitHub #87: "boost::any stopped working as Kleene event in 1.86 in boost::msm"]. * boost_phrase:library[Multiprecision,/libs/multiprecision/]: ** Significant improvements to testing and coverage of newer `cpp_double_fp_backend`. * boost_phrase:library[MySQL,/libs/mysql/]: ** Deprecated support for Clang versions older than 4.0. These compilers might still work, but they won't be actively tested in CI. ** Added tests to guarantee compatibility with MySQL 9.x. ** Added tests to guarantee compatibility with Clang versions up to 20, and GCC versions up to 15. * boost_phrase:library[Parser,/libs/parser/]: ** Fixed ill-formedness when using move-only callables with closures (boost_gh:pr[parser,284]) ** Fix wonky `const`-incompatibility in `GlobalState` parser template params (boost_gh:issue[parser,250]). ** Fix ill-formedness in some cases when using the permutation parser (boost_gh:issue[parser,268]). ** Fixed an error in sequence parsing that could cause some attributes to be overwritten by later parsers in a sequence (boost_gh:issue[parser,279]). ** Fix the handling of opt-parsers that could leave a `std::optional` attribute containing a value even though the parser that produced it failed (boost_gh:issue[parser,279] and boost_gh:issue[parser,285]). ** Multiple runtime optimizations (boost_gh:issue[parser,245], boost_gh:pr[parser,254], boost_gh:pr[parser,255], boost_gh:pr[parser,256]). ** A modest compile-time and code size optimization (boost_gh:issue[parser,250]). ** Make `transform` `constexpr` (boost_gh:pr[parser,275]). ** Move-versus-forward warning mitigation (boost_gh:issue[parser,272]). ** Correct the documentation for the attribute type of the `if_` directive (boost_gh:issue[parser,278]). ** Correct many, many typos in the docs (boost_gh:pr[parser,271]). * boost_phrase:library[PFR,/libs/pfr/]: ** Added an implementation based on C++26 destructuring into a pack, that *fixes majority of known limitations* of the library and avoids excessive template instantinations. The new implementation can be explicitly enabled/disabled by a new `BOOST_PFR_USE_CPP26` macro. Many thanks to https://github.com/jcelerier[Jean-Michaƫl Celerier] for the PR (boost_gh:pr[pfr,194]). ** Multiple fixes to CMake. Many thanks to https://github.com/Flamefire[Alexander Grund] for the PRs! * boost_phrase:library[Random,/libs/random/]: ** Fix for construction of xoshiro family of generators from SeedSeq. * boost_phrase:library[Redis,/libs/redis/]: ** Important changes to *cancellation*: *** Improved the per-operation support in `async_exec()`, and added support for `asio::cancel_after`. Requests can now be cancelled at any point, and cancellations don't interfere with other requests anyhow. Pull requests boost_gh:pr[redis,310] and boost_gh:issue[redis,226]. *** Deprecated the `cancel_on_connection_lost` and `cancel_if_not_connected` flags in `request::config`. To limit the time span that `async_exec` might take, use `asio::cancel_after`, instead. `cancel_on_connection_lost` default has been changed to `false`. Pull requests boost_gh:pr[redis,329] and boost_gh:pr[redis,334]. *** Deprecated calling `cancel` with `operation::resolve`, `connect`, `ssl_handshake`, `reconnection` and `health_check`. Users should employ `cancel(operation::run)`, instead. Pull request boost_gh:pr[redis,321]. *** Added support for per-operation cancellation in `async_run()`. Issue boost_gh:issue[redis,319]. ** Added support for *custom setup requests* using `config::setup`. When setting these fields, users can replace the library-generated `HELLO` request by any other arbitrary request. Issue boost_gh:issue[redis,302] and pull request boost_gh:pr[redis,303]. + ** Deprecated `request::config::hello_with_priority`. If you need to execute a request before any other, use `config::setup`, instead. Pull request boost_gh:pr[redis,305]. ** *Valkey* long-term support: we guarantee Valkey compatibility starting with this release. Issue boost_gh:issue[redis,296]. ** Added a `request::append()` function, to concatenate request objects. Issue boost_gh:issue[redis,341]. ** The health checker algorithm has been redesigned to avoid false positives under heavy loads. `PING` commands are now only issued when the connection is idle, instead of periodically. Issue boost_gh:issue[redis,104]. ** Added `config::read_buffer_append_size`, which allows to control the expansion of the connection's read buffer. Pull request boost_gh:pr[redis,283]. ** Added `usage::bytes_rotated`, which measures data copying when reading and parsing data from the server. Pull request boost_gh:pr[redis,311]. ** Bug fixes: *** Fixed a bug causing an exception to be thrown when parsing a response that contains an intermediate error into a `generic_response`. Issue boost_gh:issue[redis,287]. *** Fixed a number of race conditions in the `cancel()` function of `connection` and `basic_connection` that could cause cancellations to be ignored. Issue boost_gh:issue[redis,318]. *** Users with an empty password but a non-default username are now correctly authenticated. Issue boost_gh:issue[redis,298]. *** Fixed a problem that could cause an error during `HELLO` to make subsequent `HELLO` attempts during reconnection to fail. Issue boost_gh:issue[redis,290]. *** Errors during `HELLO` are now correctly logged. Issue boost_gh:issue[redis,297]. * boost_phrase:library[SmartPtr,/libs/smart_ptr/]: ** The functionality enabled by the deprecated macros `BOOST_SP_ENABLE_DEBUG_HOOKS`, `BOOST_SP_USE_STD_ALLOCATOR`, and `BOOST_SP_USE_QUICK_ALLOCATOR` has been removed. ** The header `` has been marked deprecated and will be removed in a future release. ** Configurations that define `BOOST_NO_CXX11_HDR_ATOMIC` are no longer supported; a conforming {cpp}11 `` is now required. ** The deprecated macros `BOOST_AC_USE_SPINLOCK`, `BOOST_AC_USE_PTHREADS`, `BOOST_SP_USE_SPINLOCK`, and `BOOST_SP_USE_PTHREADS` are no longer functional. ** Platform-specific implementations of `atomic_count`, `sp_counted_base` and `spinlock` are no longer used and have been removed. ** Configurations that define `BOOST_NO_CXX11_HDR_MUTEX` are no longer supported; a conforming {cpp}11 `` is now required. ** Some unused headers in `boost/smart_ptr/detail/` have been removed. * boost_phrase:library[Stacktrace,/libs/stacktrace/]: ** Fixed missing include. Thanks to https://github.com/orgads[Orgad Shaneh] for the fix! ** Fixed URL in `libbacktrace_impls.hpp`, thanks to https://github.com/jwakely[Jonathan Wakely]. * boost_phrase:library[StaticString,/libs/static_string/]: ** Aligned `to_static_[w]string()` with `std::to_[w]string()` in C++26. ** Removed usage of an additional buffer in `to_static_[w]string()`. ** Added `resize_and_overwrite()`. * boost_phrase:library[STLInterfaces,/libs/stl_interfaces/]: ** Fixed ill-formedness with GCC 14 (boost_gh:pr[stl_interfaces,80]). ** Fixed ill-formedness when using move-only callables with closures. * boost_phrase:library[Test,/libs/test/]: ** Fixed a few warnings on Windows Clang. * boost_phrase:library[TypeIndex,/libs/type_index/]: ** Dropped dependency on Boost.Core. ** Run all the tests in CMake too, Many thanks to https://github.com/Flamefire[Alexander Grund] for some fixes and help. * boost_phrase:library[URL,/libs/url/]: ** `segments_view` and `segments_encoded_view` gained constant-time iterator-based subview constructors. ** Added zone-id setters (e.g. for IPv6 link-local addresses). ** Host setters now accept/propagate zone-id. ** Fixed: `resolve` now replicates the reference fragment in all cases (boost_gh:issue[url,920]). ** Fixed: `encoded_host_address` assertions account for zone-id. ** Refactor: replaced `BOOST_STATIC_ASSERT` with `BOOST_CORE_STATIC_ASSERT` (boost_gh:issue[url,934]). ** Refactor: preserved absolute semantics for segment subviews (boost_gh:issue[url,939]). * boost_phrase:library[Uuid,/libs/uuid/]: ** `string_generator` is now `constexpr` on {cpp}14 and higher. ** Added header `boost/uuid/constants.hpp`. ** Renamed `boost/uuid/uuid_generators.hpp` to `boost/uuid/generators.hpp`. The old name is retained for compatibility. * boost_phrase:library[Variant2,/libs/variant2/]: ** More functions have been marked as `constexpr`, including `~variant`. This didn't matter before {cpp}20, but does now. == 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.