In Progress Releases
Note: The release notes on this page are for releases still under development. Please don't use this page as a source of information, it's here for development purposes only. Everything is subject to change.
Version 1.87.x
In Progress
New Libraries
-
Parser: Framework for building parsers, from Zach Laine.
Updated Libraries
-
Beast:
-
API Changes
-
Added
error_code
overload forbasic_fields::insert()
. -
Added overload for
websocket::stream::get_status
to query permessage-deflate status.
-
-
Fixes
-
Fixed use-after-move in calls to
net::dispatch
withinhttp::basic_stream
, which causedbad_executor
exceptions on timeouts. -
Removed mutating operations in initiating functions.
-
Fixed cancellation handling in
teardown_tcp_op
. -
Set
state_
inbasic_parser
before callingon_finish_impl
. -
Removed static specifier from
clamp
functions. -
Addressed
-Wattributes
warnings in tests. -
Addressed unreachable code warning in tests.
-
-
Improvements
-
Added forward declaration headers for types in
beast::http
namespace -
Enabled
http::parser
to usebasic_fields::insert()
witherror_code
overload -
Applied
header_limit_
inhttp::basic_parser
to trailer headers -
Improved
http::basic_parser
to returnhttp::error::header_limit
earlier -
Added support for modular boost build structure
-
-
Acknowledgements
-
Jackarain, Saleh Hatefinya, René Ferdinand Rivera Morell
-
-
-
Charconv:
-
Fixed support for PPC64LE architecture using
__ibm128
as long double format -
Fixed intrinsic usage with Windows ARM64 platform
-
Fixed formatting of fixed with specified precision using
std::float128_t
or__float128
-
-
Compat:
-
Added
to_array.hpp
(contributed by Ruben Perez Hidalgo.)
-
-
Container:
-
Added
stored_size
option tostatic_vector
andsmall_vector
.
-
-
Filesystem:
-
As was announced in 1.84.0, Windows versions prior to 10 are no longer supported.
-
On Windows,
canonical
is now based on theGetFinalPathNameByHandleW
WinAPI function. As a side effect, drive letters are converted to upper case, which makes the resulting paths more interoperable. (#325) -
v4:
canonical
no longer produces a trailing directory separator in the resulting path, if the input path has one. -
If a
path
constructor or member function is called with an argument of a user-defined type that is convertible topath
and one or moreSource
types, the conversion topath
is 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
dirfd
being 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
noexcept
thoseboost::flyweight
operations previously documented as not throwing (issue #15).
-
-
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_manager
nows 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_ABI
to1
before 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_to
is 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_ref
segfaulting 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_interrupted
exception 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_interrupted
pending exception. -
For timed waiting operations, timeouts are now using std::chrono time units. This means that the
ordering_window
named parameter that is supported by thebounded_ordering_queue
andunbounded_ordering_queue
classes now expects anstd::chrono::duration
value instead ofboost::posix_time::time_duration
from Boost.DateTime. -
In case of errors indicated by thread synchronization primitives,
std::system_error
exception 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
float128
trivially copyable -
Make
__float128
a floating point type even in non-GNU modes
-
-
MySQL:
-
Breaking changes to experimental APIs:
-
The thread-safety feature in
connection_pool
has been redesigned to overcome some design flaws found by user experience. The boolean optionthread_safe
has been added topool_params
(set tofalse
by 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_safe
isfalse
, the usual Asio executor semantics apply, with no overhead. -
pool_executor_params
has been removed, replaced bypool_params::connection_executor
andpool_params::thread_safe
. -
The built-in timeout functionality in
connection_pool::async_get_connection
has been completely removed. This function now supports per-operation cancellation, so the same functionality can be achieved by usingasio::cancel_after
. -
Destroying a
connection_pool
now cancels outstanding async operations, as other Asio I/O objects do. This prevents resource leaks: an outstandingasync_run
operation extends the pool's lifetime until the operation completes, which could cause the pool object to never get destroyed. -
When an
async_get_connection
operation is cancelled before a connection is available, the operation now consistently fails withclient_errc::pool_not_running
,client_errc::no_connection_available
orclient_errc::pool_cancelled
, depending on the pool state (previously, it would fail with eitherclient_errc::timeout
or the last error code encountered by the internalasync_connect
operations performed by the pool). This information is now included in the output diagnostics object. -
client_errc::timeout
andclient_errc::cancelled
have been removed. -
Calling
async_get_connection
on a pool that is not running no longer fails immediately, but waits forasync_run
to be called. -
sequence
now returns an owning type. This makes it safe use withwith_params
in deferred async operations.format_sequence_view
has been renamed toformat_sequence
. -
sequence
has been moved to a separate header,boost/mysql/sequence.hpp
.
-
-
any_connection
, client-side SQL formatting (includingformat_sql
andwith_params
) andconnection_pool
have been promoted to stable APIs. -
any_connection
is now recommended for new code, instead ofconnection
and its aliasestcp_connection
,tcp_ssl_connection
andunix_connection
. -
Added
with_params
, a newExecutionRequest
encapsulating 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 includediagnostics
objects, matching how sync throwing functions work. -
with_diagnostics(asio::deferred)
is now the default completion token for all operations inany_connection
andconnection_pool
. This causes expressions likeco_await conn.async_connect(params)
to behave identically toconn.connect(params)
. Note thatconnection
and its type aliases haven't been updated to match this behavior. -
Async functions in
connection_pool
now support per-operation cancellation. -
All async operations now support
asio::cancel_after
,asio::cancel_at
and similar completion tokens that require a bound executor to initiations passed toasio::async_initiate
. -
connection
andany_connection
now dispatch immediate completions through the token's immediate executor. -
Fixed an issue that caused a crash when trying to use an
any_connection
that hasn't been previously connected. -
Removed an incorrect
noexcept
specifier 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.
-
-
PFR:
-
Significant compilation time improvement for structures with big size and small fields count. Many thanks to Zachary Wassall for the PR#120.
-
Fixed
pragma
directives. -
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.
-
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_PTHREADS
has been deprecated and support for it will be removed in a future release.
-
-
Stacktrace:
-
Don't export
boost_stacktrace_impl_return_nullptr
for static build on MSVC. Many thanks to huangqinjin for the PR#186. -
Fixed autolinking with
ole32.lib
andDbgeng.lib
while 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_map
andboost::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_set
operations 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_list
assignment issues for open-addressing containers (PR#277). -
Allowed non-copyable callables to be passed to the
std::initializer_list
overloads ofinsert_{and|or}_[c]visit
for concurrent containers, by internally passing astd::reference_wrapper
of the callable to the iterator-pair overloads.
-
-
UUID:
-
Restored the ability to construct a
constexpr uuid
that 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.