Version 1.87.0
Version 1.87.0
December 12th, 2024 00:52 GMT
| Platform | File | SHA256 Hash |
|---|---|---|
| unix | boost_1_87_0.tar.bz2 | af57be25cb4c4f4b413ed692fe378affb4352ea50fbe294a11ef548f4d527d89 |
| boost_1_87_0.tar.gz | f55c340aa49763b1925ccf02b2e83f35fdcf634c9d5164a2acb87540173c741d | |
| windows | boost_1_87_0.7z | db6b7d77a2286ebe79d4aa7252c08b051d271fd8b013b6b18bc7a966552c1139 |
| boost_1_87_0.zip | f367a218d27b23b568956bacf56d08d2c1d9647211337136be8cac5cb2ff0828 |
New Libraries
-
Parser: Framework for building parsers, from Zach Laine.
Updated Libraries
-
Asio:
-
Added support for using byte spans and sequences of byte spans as buffer sequences. This means that they can be passed directly to I/O operations such as
async_read. -
Added support for generic dispositions, which are types that can be used to test whether an asynchronous operation completed without error. This includes
error_codeandexception_ptr, but can be extended to user types via specialisation of thedisposition_traitsclass template. The standard typesstd::error_codeandstd::exception_ptrare recognised as dispositions. -
Added disposition support to the
boost::asio::use_futurecompletion token,boost::asio::awaitable<>-based coroutines,boost::asio::spawn(), andboost::asio::experimental::cancellation_condition. -
Added the
execution_context::service_makerabstract base class. Aservice_makeris an object that is passed to an execution context's constructor, and allows services to be added at context construction time. -
Added
boost::asio::config, which provides access to configuration parameters that are associated with an execution context. The class is intended for use by asio internals, or by libraries or user-provided abstractions that build on top of asio, and will typically be used to fine tune behaviour, such as enabling or disabling certain optimisations. A concrete configuration source, such asboost::asio::config_from_env,boost::asio::config_from_concurrency_hintandboost::asio::config_from_string, may be passed to theio_contextorthread_poolconstructor. -
Added an initial set of configuration parameters recognised by Asio's
io_contextandthread_poolimplementations. -
Removed some previously deprecated facilities.
-
Deprecated
basic_io_objectanddeadline_timer. -
Added rvalue-qualified
operator()overloads to associating binders. -
Added support for modular build structure.
-
Fixed
spawn()of functions that return move-only types. -
Fixed
co_composedto not require concepts support. -
Fixed the epoll reactor to not try to re-register regular file descriptors after fork.
-
Fixed a leak in
ssl::detail::enginemove assignment. -
Fixed compile error when
BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLINGis defined. -
Fixed compile error when using Clang 19.
-
Changed
thread_pool::join()to ensure that it stops threads that are subsequently added to the pool usingthread_pool::attach(). -
Fixed the offsets passed to
io_uring_prep_write_fixedandio_uring_prep_read_fixed, when they are used for stream-oriented operations. -
Consult the Revision History for further details.
-
-
Beast:
-
API Changes
-
Added
error_codeoverload forbasic_fields::insert(). -
Added overload for
websocket::stream::get_statusto query permessage-deflate status.
-
-
Fixes
-
Fixed use-after-move in calls to
net::dispatchwithinhttp::basic_stream, which causedbad_executorexceptions on timeouts. -
Removed mutating operations in initiating functions.
-
Fixed cancellation handling in
teardown_tcp_op. -
Set
state_inbasic_parserbefore callingon_finish_impl. -
Removed static specifier from
clampfunctions. -
Addressed
-Wattributeswarnings in tests. -
Addressed unreachable code warning in tests.
-
-
Improvements
-
Added forward declaration headers for types in
beast::httpnamespace -
Enabled
http::parserto usebasic_fields::insert()witherror_codeoverload -
Applied
header_limit_inhttp::basic_parserto trailer headers -
Improved
http::basic_parserto returnhttp::error::header_limitearlier -
Added support for modular boost build structure
-
-
Acknowledgements
-
Jackarain, Saleh Hatefinya, René Ferdinand Rivera Morell
-
-
-
Charconv:
-
Fixed support for PPC64LE architecture using
__ibm128as long double format -
Fixed intrinsic usage with Windows ARM64 platform
-
Fixed formatting of fixed with specified precision using
std::float128_tor__float128
-
-
Cobalt:
-
Removed requirement for get_executor to return a const ref
-
Added experimental/composition.
-
-
Compat:
-
Added
to_array.hpp(contributed by Ruben Perez Hidalgo.)
-
-
Container:
-
Added
stored_sizeoption tostatic_vectorandsmall_vector.
-
-
Filesystem:
-
As was announced in 1.84.0, Windows versions prior to 10 are no longer supported.
-
On Windows,
canonicalis now based on theGetFinalPathNameByHandleWWinAPI function. As a side effect, drive letters are converted to upper case, which makes the resulting paths more interoperable. (#325) -
v4:
canonicalno longer produces a trailing directory separator in the resulting path, if the input path has one. -
If a
pathconstructor or member function is called with an argument of a user-defined type that is convertible topathand one or moreSourcetypes, the conversion topathis now chosen by default. This may resolve argument conversion ambiguities in some cases, but may also result in a less optimal conversion path. If a different conversion path is desired, users are recommended to use explicit type casts. (#326) -
Added a workaround for
dirfdbeing a macro on FreeBSD 9 and older. (#328)
-
-
Flyweight:
-
Added
concurrent_factory, a factory based on a concurrent container from Boost.Unordered that provides excellent performance in multithreaded scenarios. -
Marked as
noexceptthoseboost::flyweightoperations previously documented as not throwing (issue #15).
-
-
Geometry:
-
Improvements
-
Use using instead of typedef in part of the code
-
Modernize meta function with alias in part of the code
-
Add support for modular build structure
-
Complete CMake coverage (added github actions cmake tests)
-
Improve documentation workflow
-
Update Qt end WxWidgets examples
-
Add enumerate to prepare for 17 and 23
-
-
Breaking changes
-
Remove deprecated rescaling code
-
-
Solved issues
-
-
Interprocess:
-
Decreased number of Boost dependencies from 11 (in total) to 7.
-
Deprecated
<boost/interprocess/containers/*.hpp>headers. They were the original source of Boost.Container in 2011, but no longer maintained. As a long transition, Boost.Interprocess has maintained those headers for compatibility. They will be removed in a future Boost release. -
Some workarounds for Cygwin were added. Regression tests now work on Cygwin64.
-
ABI breaking:
segment_managernows uses a new implementation that supports overaligned types and fixes some existing bugs. You can obtain the pre-Boost 1.87 ABI #definingBOOST_INTERPROCESS_SEGMENT_MANAGER_ABIto1before including Boost.Interprocess headers. -
Fixed bugs:
-
-
JSON:
-
Direct serialization.
-
Add GDB pretty printers for Boost.JSON types.
-
Conversion into structs ignores unknown keys.
-
Exception wrapping behaviour for
value_tois simplified. -
Deprecated initilaizer list behavior was removed.
-
Deprecated type aliases were removed.
-
Use correct 64bit full multiplication for MinGW on ARM64.
-
Fix parse_into handling of tuple of the wrong size.
-
Check for input size larger than allowed size of sequence.
-
Fix
value_refsegfaulting on GCC 14.
-
-
LexicalCast:
-
Dropped dependency on Boost.Integer, leading to better compile times.
-
-
Log:
-
Replaced Boost.Thread synchronization primitives with equivalents from the C++ standard library. This may improve multithreaded performance, but also has user-facing consequences:
-
Boost.Thread thread interruption is no longer supported. Boost.Log no longer has special treatment for the
thread_interruptedexception that is used by Boost.Thread to implement thread interruption. This exception will be handled like any other exception. In particular, user-specified exception handlers may now be invoked with thethread_interruptedpending exception. -
For timed waiting operations, timeouts are now using std::chrono time units. This means that the
ordering_windownamed parameter that is supported by thebounded_ordering_queueandunbounded_ordering_queueclasses now expects anstd::chrono::durationvalue instead ofboost::posix_time::time_durationfrom Boost.DateTime. -
In case of errors indicated by thread synchronization primitives,
std::system_errorexception is thrown instead of Boost.Thread exception types.
-
-
Added support for C++ standard library lock types to
strictest_lock.
-
-
Mp11:
-
Added
mp_lambda(contributed by Joaquin M Lopez Munoz)
-
-
Multiprecision:
-
Make
float128trivially copyable -
Make
__float128a floating point type even in non-GNU modes
-
-
MySQL:
-
Breaking changes to experimental APIs:
-
The thread-safety feature in
connection_poolhas been redesigned to overcome some design flaws found by user experience. The boolean optionthread_safehas been added topool_params(set tofalseby default). When set, some pool functions change behavior so they can be safely used concurrently. This works by internally creating a strand, dispatching to it when required, and re-wiring cancellation signals. Whenpool_params::thread_safeisfalse, the usual Asio executor semantics apply, with no overhead. -
pool_executor_paramshas been removed, replaced bypool_params::connection_executorandpool_params::thread_safe. -
The built-in timeout functionality in
connection_pool::async_get_connectionhas been completely removed. This function now supports per-operation cancellation, so the same functionality can be achieved by usingasio::cancel_after. -
Destroying a
connection_poolnow cancels outstanding async operations, as other Asio I/O objects do. This prevents resource leaks: an outstandingasync_runoperation extends the pool's lifetime until the operation completes, which could cause the pool object to never get destroyed. -
When an
async_get_connectionoperation is cancelled before a connection is available, the operation now consistently fails withclient_errc::pool_not_running,client_errc::no_connection_availableorclient_errc::pool_cancelled, depending on the pool state (previously, it would fail with eitherclient_errc::timeoutor the last error code encountered by the internalasync_connectoperations performed by the pool). This information is now included in the output diagnostics object. -
client_errc::timeoutandclient_errc::cancelledhave been removed. -
Calling
async_get_connectionon a pool that is not running no longer fails immediately, but waits forasync_runto be called. -
sequencenow returns an owning type. This makes it safe use withwith_paramsin deferred async operations.format_sequence_viewhas been renamed toformat_sequence. -
sequencehas been moved to a separate header,boost/mysql/sequence.hpp.
-
-
any_connection, client-side SQL formatting (includingformat_sqlandwith_params) andconnection_poolhave been promoted to stable APIs. -
any_connectionis now recommended for new code, instead ofconnectionand its aliasestcp_connection,tcp_ssl_connectionandunix_connection. -
Added
with_params, a newExecutionRequestencapsulating a query template string and parameters to expand the query. When executed, it expands the query using client-side SQL formatting and sends it to the server for execution. This is the new recommended way to run simple queries with parameters. -
Added
with_diagnostics, an adapter completion token that transforms exceptions thrown by async functions to includediagnosticsobjects, matching how sync throwing functions work. -
with_diagnostics(asio::deferred)is now the default completion token for all operations inany_connectionandconnection_pool. This causes expressions likeco_await conn.async_connect(params)to behave identically toconn.connect(params). Note thatconnectionand its type aliases haven't been updated to match this behavior. -
Async functions in
connection_poolnow support per-operation cancellation. -
All async operations now support
asio::cancel_after,asio::cancel_atand similar completion tokens that require a bound executor to initiations passed toasio::async_initiate. -
connectionandany_connectionnow dispatch immediate completions through the token's immediate executor. -
Fixed an issue that caused a crash when trying to use an
any_connectionthat hasn't been previously connected. -
Removed an incorrect
noexceptspecifier from a potentially throwing constructor infield. -
Fixed an issue that could cause the write buffer size to exceed the configured buffer size limit.
-
Heavily updated the documentation and examples to be more relevant and reflect the new recommended best practices.
-
-
Optional:
-
Breaking change. Dropped support for C++03. C++11 is now the required minimum; at least some C++11 features.
-
Dropped dependency on Boost.Utility.
-
Dropped dependency on Boost.Predef.
-
Dropped dependency on Boost.StaticAssert.
-
Dropped dependency on Boost.Move.
-
A bit faster implementation of some relational operations.
-
Warning. In the future releases we intend to introduce the range interface into
optional, so thatstd::ranges::range<optional<T>>will betrue. This may affect the overload resolution in programs that make decisions based on predicates such asstd::ranges::range. -
Tags
in_place_initandin_place_init_ifbecomeinline constexprand therewith leave smaller footprint in the executable. This addresses issue #103.
-
-
PFR:
-
Significant compilation time improvement for structures with big size and small fields count. Many thanks to Zachary Wassall for the PR#120.
-
Fixed
pragmadirectives. -
Initial support for C++20 Modules. See the docs for more info.
-
Fix unused variable warnings in core_name14_disabled.hpp. Thanks to Anarthal (Rubén Pérez) for the PR#183 and PR#187.
-
Default limit for fields count in aggregate in C++17 was raised from 100 to 200.
-
Fixed warning about GCC not being aware of the -Wundefined-var-template.
-
Multiple minor improvement for compilation time.
-
Process:
-
(v2) Implemented cancellation of async_wait on windows.
-
(v2) Added FORCE_DISABLE_CLOSE_RANGE
-
(v2) ext: Multiple ext fixes for BSD & Solaris.
-
(v2) unavailable
extfunctions now compile and give anoperation_not_supportederror (includes IOS) -
(v2) multiple link fixes
-
(v2) removed filesystem from the linked library - which filsystem library is used only affects header files now
-
(v1) Added deprecation notice for 1.88.
-
-
SmartPtr:
-
C++03 is no longer supported, a C++11 compiler is required. This includes GCC 4.8 or later, and MSVC 14.0 or later.
-
The functionality enabled by the macros
BOOST_SP_ENABLE_DEBUG_HOOKS,BOOST_SP_USE_STD_ALLOCATOR,BOOST_SP_USE_QUICK_ALLOCATOR,BOOST_AC_USE_SPINLOCK,BOOST_AC_USE_PTHREADS,BOOST_SP_USE_SPINLOCK, andBOOST_SP_USE_PTHREADShas been deprecated and support for it will be removed in a future release.
-
-
Stacktrace:
-
Don't export
boost_stacktrace_impl_return_nullptrfor static build on MSVC. Many thanks to huangqinjin for the PR#186. -
Fixed autolinking with
ole32.libandDbgeng.libwhile using clang under Windows OS. -
Fixed missing namespace in docs. Thanks to Mats Taraldsvik for the PR#181.
-
Unordered:
-
Major update.
-
Added concurrent, node-based containers
boost::concurrent_node_mapandboost::concurrent_node_set. -
Added
insert_and_visit(x, f1, f2)and similar operations to concurrent containers, which allow for visitation of an element right after insertion (by contrast,insert_or_visit(x, f)only visits the element if insertion did not take place). -
Made visitation exclusive-locked within certain
boost::concurrent_flat_setoperations to allow for safe mutable modification of elements (PR#265). -
In Visual Studio Natvis, supported any container with an allocator that uses fancy pointers. This applies to any fancy pointer type, as long as the proper Natvis customization point "Intrinsic" functions are written for the fancy pointer type.
-
Added GDB pretty-printers for all containers and iterators. For a container with an allocator that uses fancy pointers, these only work if the proper pretty-printer is written for the fancy pointer type itself.
-
Fixed
std::initializer_listassignment issues for open-addressing containers (PR#277). -
Allowed non-copyable callables to be passed to the
std::initializer_listoverloads ofinsert_{and|or}_[c]visitfor concurrent containers, by internally passing astd::reference_wrapperof the callable to the iterator-pair overloads.
-
-
UUID:
-
Restored the ability to construct a
constexpr uuidthat was inadvertently lost in 1.86.
-
-
Wave:
-
Build improvements including modular build support, thanks René Rivera
Compilers Tested
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
Marshall Clow, Glen Fernandes and Ion Gaztañaga managed this release.
