The summary is being generated, please check back later.
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.
Fix BOOST_VERIFY in the rare case of both BOOST_ENABLE_ASSERT_HANDLER and BOOST_ENABLE_ASSERT_DEBUG_HANDLER being defined.
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.
Hashing a valueless std::variant instance no longer throws.
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:
Added unchecked_emplace_back and unchecked_push_back to boost::container::vector, boost::container::static_vector, and boost::container::small_vector.
Implemented C++23 P1518 change: modified allocator-extended constructors for all containers so that the deduction guides for containers are not overconstrained.
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. (#349)
Support for platforms with non-thread-safe readdir is deprecated and will be removed in a future release. Although not
required until 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.
Improvements (geometry):
Solved issues (geometry):
Added built-in support for std::optional
Added built-in support for std::variant, std::monostate
Heap:
This release is the last to support C++14. Future releases will require C++17.
ICL:
Starting with version 22, 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 C++ committee regarding non-heterogeneous lookup for associative containers (PR#54, LWG4752).
Fixed C++20-related problems with std::iter_value_t<element_iterator> and GCC 10-12’s
handling of rewritten relational operators (PR#54).
Fixed a GCC 10-11 codegen bug (PR#54).
Added is_*_iterator_v variable templates in 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. (PR#96)
This release is the last to support C++14. Future releases will require 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.
Mp11:
Improved the performance of a number of algorithms (contributed by Jonathan Poelen)
MSM:
New features (backmp11):
Provide an observer API for logging support (#220)
Forward Kleene events to actions and guards without conversion (#229)
Ensure basic exception guarantee and propagate exceptions to the caller (#221)
Provide a reflection API and serialization support for Boost.Serialization, Boost.JSON and nlohmann/json (#197)
Rework terminate and interrupt state handling and provide a machine_state enum (#244)
Configurable event pool and inline storage (#239)
API reference and examples are now available
Bug fixes (backmp11):
State machine processes events although it is not running (#198)
Breaking changes (backmp11):
Events in process_event(…) are not enqueued automatically anymore to reduce memory footprint, use enqueue_event(…) in actions (#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 (#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 (#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 (#242) and will be removed
fix(back, back11): Infinite recursion with event deferral in orthogonal regions (regression from 1.78) (#184)
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.Interprocess allocators.
Fixed a performance issue with hashed indices when rehashing at very large container sizes (PR#94). Contributed by Daniel Král.
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
(PR#511).
Reduces `pool_params::ping_interval’s default from 1h to 10s. This improves the detection of broken connections (PR#512).
The read buffer has been optimized by reducing the frequency of data rotations
when incomplete messages are received (PR#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 (PR#505).
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 (PR#428). Contributed by @L0rentz.
Optimized buffer rotations to reduce CPU consumption when many small messages arrive in a single network packet (PR#415).
Added initializers to all members in the config struct.
This allows using designated initializers to create config objects
(PR#424).
Removed the standalone workflow from the CMake. This was an undocumented way of consuming Boost.Redis with CMake aimed to internal development (PR#409).
Fix unwrap_and_invoke for functions returning void.
Added interoperability with 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 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 (PR#348). Contributed by Daniel Král.
URL:
Fixed a heap buffer overflow in normalize_path for authority-less URLs whose normalized path begins with // (PR#995).
Fixed an uninitialized read in ipv6_address_rule when an embedded IPv4 address has no preceding h16, e.g. https://[::. (PR#994).
Fixed unsigned-integer-overflow sanitizer findings in case-insensitive comparisons, hashing, and format (PR#994).
Fixed decoded query-size tracking in url_base::edit_params (PR#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 (PR#988).
B2:
Includes release of B2 version 5.5.1.
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
Marshall Clow, Glen Fernandes and Ion Gaztañaga managed this release.
Boost is publicly released three times a year in April, August, and December. Each release has updates to existing libraries, and any new libraries that have passed the rigorous acceptance process.