New libraries
Added a parser framework for building customizable parsers, with extensible disposition_traits support.
Added a parser framework for building customizable parsers, with extensible disposition_traits support.
Improved compile times by removing Boost.Integer from lexical_cast and optimizing large‑structure handling in pfr.
Removed 19 dependencies across six libraries and added four new dependencies across four libraries.
Fixed numerous bugs including ssl::detail::engine leak, spawn move‑only handling, epoll re‑registration after fork, and several platform compile errors.
Made in_place_init and in_place_init_if constexpr, added C++20 module support, and expanded modular build structure.
December 12th, 2024 00:52 GMT
async_read.
error_code
and exception_ptr,
but can be extended to user types via specialisation of the disposition_traits class template.
The standard types std::error_code
and std::exception_ptr are recognised as
dispositions.
boost::asio::use_future
completion token, boost::asio::awaitable<>-based coroutines, boost::asio::spawn(),
and boost::asio::experimental::cancellation_condition.
execution_context::service_maker
abstract base class. A service_maker
is an object that is passed to an execution context's constructor,
and allows services to be added at context construction time.
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 as
boost::asio::config_from_env, boost::asio::config_from_concurrency_hint and
boost::asio::config_from_string, may be passed
to the io_context
or thread_pool constructor.
io_context and thread_pool implementations.
basic_io_object
and deadline_timer.
operator() overloads to associating binders.
spawn()
of functions that return move-only types.
co_composed
to not require concepts support.
ssl::detail::engine
move assignment.
BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING
is defined.
thread_pool::join() to ensure that it stops threads
that are subsequently added to the pool using thread_pool::attach().
io_uring_prep_write_fixed
and io_uring_prep_read_fixed,
when they are used for stream-oriented operations.
error_code
overload for basic_fields::insert().
websocket::stream::get_status
to query permessage-deflate status.
net::dispatch
within http::basic_stream,
which caused bad_executor
exceptions on timeouts.
teardown_tcp_op.
state_
in basic_parser
before calling on_finish_impl.
clamp
functions.
-Wattributes
warnings in tests.
beast::http namespace
http::parser
to use basic_fields::insert() with error_code
overload
header_limit_
in http::basic_parser to trailer headers
http::basic_parser
to return http::error::header_limit
earlier
__ibm128
as long double format
std::float128_t or __float128
to_array.hpp (contributed by Ruben Perez
Hidalgo.)
stored_size
option to static_vector
and small_vector.
canonical
is now based on the GetFinalPathNameByHandleW
WinAPI function. As a side effect, drive letters are converted to
upper case, which makes the resulting paths more interoperable. (#325)
canonical
no longer produces a trailing directory separator in the resulting
path, if the input path has one.
path constructor
or member function is called with an argument of a user-defined type
that is convertible to path
and one or more Source
types, the conversion to path
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)
dirfd
being a macro on FreeBSD 9 and older. (#328)
concurrent_factory, a factory
based on a concurrent container from Boost.Unordered
that provides excellent performance in multithreaded scenarios.
noexcept those
boost::flyweight operations previously
documented as not throwing (issue #15).
function_output_iterator
is now compliant with std::output_iterator
concept. (#85)
<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.
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 #defining
BOOST_INTERPROCESS_SEGMENT_MANAGER_ABI
to 1 before including
Boost.Interprocess headers.
interprocess::ipcdetail::intermodule_singleton
not working on MinGW").
Floating
point inaccuracies
in get_current_process_creation_time
lead to
intermodule_singleton` failures").
value_to
is simplified.
value_ref segfaulting
on GCC 14.
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 the thread_interrupted
pending exception.
ordering_window
named parameter that is supported by the bounded_ordering_queue
and unbounded_ordering_queue
classes now expects an std::chrono::duration
value instead of boost::posix_time::time_duration
from Boost.DateTime.
std::system_error exception is
thrown instead of Boost.Thread exception types.
strictest_lock.
mp_lambda (contributed
by Joaquin M Lopez Munoz)
float128 trivially
copyable
__float128 a
floating point type even in non-GNU modes
connection_pool
has been redesigned to overcome some design flaws found by
user experience. The boolean option thread_safe
has been added to pool_params
(set to false
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. When pool_params::thread_safe
is false, the
usual Asio executor semantics apply, with no overhead.
pool_executor_params
has been removed, replaced by pool_params::connection_executor
and pool_params::thread_safe.
connection_pool::async_get_connection
has been completely removed. This function now supports per-operation
cancellation, so the same functionality can be achieved by
using asio::cancel_after.
connection_pool
now cancels outstanding async operations, as other Asio I/O
objects do. This prevents resource leaks: an outstanding async_run operation extends
the pool's lifetime until the operation completes, which could
cause the pool object to never get destroyed.
async_get_connection
operation is cancelled before a connection is available, the
operation now consistently fails with client_errc::pool_not_running,
client_errc::no_connection_available
or client_errc::pool_cancelled,
depending on the pool state (previously, it would fail with
either client_errc::timeout
or the last error code encountered by the internal async_connect operations
performed by the pool). This information is now included in
the output diagnostics object.
client_errc::timeout
and client_errc::cancelled
have been removed.
async_get_connection
on a pool that is not running no longer fails immediately,
but waits for async_run
to be called.
sequence now
returns an owning type. This makes it safe use with with_params in deferred async
operations. format_sequence_view
has been renamed to format_sequence.
sequence has
been moved to a separate header, boost/mysql/sequence.hpp.
any_connection, client-side
SQL formatting (including format_sql
and with_params)
and connection_pool
have been promoted to stable APIs.
any_connection is
now recommended for new code, instead of connection
and its aliases tcp_connection,
tcp_ssl_connection
and unix_connection.
with_params,
a new ExecutionRequest
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.
with_diagnostics,
an adapter completion token that transforms exceptions thrown by
async functions to include diagnostics
objects, matching how sync throwing functions work.
with_diagnostics(asio::deferred) is now the default completion token
for all operations in any_connection
and connection_pool.
This causes expressions like co_await
conn.async_connect(params)
to behave identically to conn.connect(params). Note that connection
and its type aliases haven't been updated to match this behavior.
connection_pool
now support per-operation cancellation.
asio::cancel_after,
asio::cancel_at and similar completion
tokens that require a bound executor to initiations passed to asio::async_initiate.
connection and any_connection now dispatch immediate
completions through the token's immediate executor.
any_connection that hasn't been
previously connected.
noexcept
specifier from a potentially throwing constructor in field.
optional,
so that std::ranges::range<optional<T>>
will be true. This may
affect the overload resolution in programs that make decisions based
on predicates such as std::ranges::range.
in_place_init
and in_place_init_if
become inline constexpr
and therewith leave smaller footprint in the executable. This addresses
issue
#103.
boost::pfr::for_each_field_with_name function
was added. Many thanks to Lena
for the PR#171.
pragma directives.
ext
functions now compile and give an operation_not_supported
error (includes IOS)
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,
and BOOST_SP_USE_PTHREADS
has been deprecated and support for it will be removed in a future
release.
Boost::stacktrace_from_exception CMake
target was added. Many thanks to int
mian for the PR#189.
boost_stacktrace_impl_return_nullptr
for static build on MSVC. Many thanks to huangqinjin
for the PR#186.
ole32.lib
and Dbgeng.lib while using clang under Windows
OS.
std::exception.
Thanks to Julien Schueller
for the PR#178.
from_exception
feature from CLI. Thanks to Dmitry
Arkhipov for the PR#194.
swap; the expected return type
is void, not bool. (#71)
[[no_unique_address]] to the data members of the adaptors
in view_adaptor.hpp. (#65)
this
for recent versions of Clang and MSVC that support it, but do not
advertise that support via __cpp_explicit_this_parameter.
(PR#68)
boost::concurrent_node_map
and boost::concurrent_node_set.
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).
boost::concurrent_flat_set
operations to allow for safe mutable modification of elements (PR#265).
std::initializer_list assignment issues
for open-addressing containers (PR#277).
std::initializer_list overloads of
insert_{and|or}_[c]visit for concurrent containers,
by internally passing a std::reference_wrapper
of the callable to the iterator-pair overloads.
constexpr
uuid that was inadvertently
lost in 1.86.
Boost's primary test compilers are:
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.