Performance improvements
io_uring backend and smaller io_context executors boost I/O layer speed; path handling avoids copies; tanh‑sinh integration faster.
io_uring backend and smaller io_context executors boost I/O layer speed; path handling avoids copies; tanh‑sinh integration faster.
Added 14 dependencies across 5 libraries and removed 3 across 3 libraries.
Fixed compression module CVE‑2016‑9840, race condition in message queue, and memory leak on repeated loads.
atomic and atomic_ref constructors now constexpr; added result<T,E> wrapper; CMake build support; QuickBook docs conversion.
December 8th, 2021 03:45 GMT
These are patches from library authors which were found too late to be fixed in the release.
experimental::coro.
aligned_alloc
on clang when using an MSVC runtime.
ip::network_v4::canonical().
io_context
executors to a single pointer.
execution::any_executor
and any_io_executor.
ssl
facilities.
bind_executor
compatibility with completion tokens.
BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
is defined.
awaitable<>.
experimental::parallel_group
that occured when the execution context was shut down with parallel
operations still pending.
source_location::to_string.
SYS_futex_time64
syscall, such as riscv32.
std::alignment_of
on clang 8 for 64-bit types on 32-bit x86 targets.
WaitOnAddress
and related APIs from public headers and therefore require user to
link with synchronization.lib
if the user requires Windows 8 or later by defining BOOST_USE_WINAPI_VERSION, _WIN32_WINNT or similar macros.
The library is linked automatically on compilers that support auto-linking
(e.g. MSVC).
long double
on x86 targets. A new BOOST_ATOMIC_NO_CLEAR_PADDING
capability macro is defined to indicate when clearing the padding
is not supported.
atomic_ref
and ipc_atomic_ref
no longer use atomic instructions to clear the padding bits in the
referenced object. This reduces the cost of the atomic reference
construction.
atomic
and ipc_atomic are
now constexpr for enums,
classes and floating point types. For classes and floating point
types, the constructors are constexpr
if the compiler supports constexpr
std::bit_cast, the type has no padding
bytes and no padding is required to implement native atomic operations.
atomic
and ipc_atomic now
perform value initialization of the contained object. For types without
a user-defined default constructor, this means the default-constructed
atomic will be zero-initialized.
<boost/core/cmath.hpp>,
enabled when BOOST_CORE_USE_GENERIC_CMATH
is defined or when the platform does not provide the necessary facilities
in <cmath>.
boost::core::type_name, a utility function that
returns the name of a type as a string.
boost::span, a C++11 implementation of
C++20's std::span (Glen Fernandes).
has_describe_enumerators,
has_describe_bases,
has_describe_members.
enum_to_string,
enum_from_string.
descriptor_by_name,
descriptor_by_pointer.
path::filename
and path::iterator no longer return an implicit
trailing dot (".") element if the path ends with a directory
separator. Instead, an empty path is returned, similar to C++17 std::filesystem.
This also affects other methods that are defined in terms of iterators
or filename, such as path::stem,
path::compare or lexicographical_compare.
For example, path("a/b/") == path("a/b/.")
no longer holds true. (#193)
path::lexically_normal
no longer produce a trailing dot (".") element and omits
a directory separator after a trailing dot-dot ("..") element
in the normalized paths.
path
append operations now consider root name and root directory in the
appended path. If the appended path is absolute, or root name is
present and differs from the source path, the resulting path is equivalent
to the appended path. If root directory is present, the result is
the root directory and relative path rebased on top of the root name
of the source path. Otherwise, the behavior is similar to v3. (#214)
path::lexically_normal now converts directory
separators to preferred separators in the root name of the normalized
paths.
path::assign,
path::append, path::concat
and the corresponding operators to avoid unnecessary path copying
and reduce the amount of code redundancy.
absolute(p, base) returning a path with root name
base.root_name()
if p starts with
a root directory. In such a case p
is already an absolute path and should be returned as is.
create_directories
no longer reports an error if the input path consists entirely of
dot (".") and dot-dot ("..") elements. The implementation
is no longer using recursion internally and therefore is better protected
from stack overflow on extremely long paths.
remove
now supports deleting read-only files. The operation will attempt
to reset the read-only attribute prior to removal. Note that this
introduces a possibility of the read-only attribute being left unset,
if the operation fails and the original value of the attribute fails
to be restored. This also affects remove_all.
(#216)
remove_all now returns
static_cast<
uintmax_t >(-1)
in case of error, similar to C++17 std::filesystem.
boost/filesystem/path.hpp
but not boost/container_hash/hash.hpp and the compiler is set to
preserve unused inline functions. (#215)
value_to
and value_from.
/Zc:implicitNoexcept- on MSVC.
operator<< and operator>> when the first argument is
a stream, to allow std::cout
<< _1.
operator->*.
first, second.
std::codecvt
specializations for char16_t
and char32_t for
compatibility with C++17 and later. (PR#159)
std::byte
type to receive methods of the inter-process message queue.
nt62
tag in the version namespace to denote the target OS ABI. For
example, the version namespace could be named as v2_mt_nt62. This name will
be part of all symbols exported by the library. Use the BOOST_USE_WINAPI_VERSION
macro consistenly when building Boost and your code to request
the minimum target Windows version.
dump stream
manipulator.
reliable_message_queue::open_or_create
or the equivalent constructor. Multiple threads or processes
calling open_or_create
concurrently with sending or receiving messages from the same
queue could end up corrupting the queue contents and potentially
crashing the process. (#162)
b2
install failing on
Windows because of missing boost_log_setup
library if BOOST_LOG_WITHOUT_SETTINGS_PARSERS
is defined. (#164)
constexpr
versions of various standard library math routines.
contains to
key-based indices (issue #35).
merge operations
to key-based indices. The functionality goes beyond the standard
specification for (unordered) associative containers in a number
of ways, most notably:
x.merge(y,first,last) merges only the elements of
y within [first,last).
splice
for sequenced and random access indices were destructive, i.e. elements
were copy-inserted into the destination and then erased from the
source. Now, splice
is based on node transfer much as merge
in key-based indices, and has been similarly extended to accept source
indices of any type: in fact, splice
can be regarded as a frontend to the same functionality provided
by merge in key-based
indices. For reasons of backwards compatibility, the destructive
behavior of splice
has been retained in the case that the source and destination containers
have unequal allocators.
node_type and
the position of the index in its multi_index_container,
(except for hashed indices, where uniqueness/non-uniqueness is also
a dependency). This has implications on the validity of iterators
to elements transferred by merge
or splice. This property
is a variant of what has been called SCARY
iterators in the C++ standard mailing lists. SCARYness is
currently (August 2021) not mandated for standard containers.
do_unshift
for the UTF-32 specialization of utf8_codecvt
now correctly returns noconv
instead of ok
utf8_codecvt
for UTF-16 output
utf8_codecvt
with unicode char types
setbuf) after filebuf
already allocated an internal buffer
#include
<memory> for inclusion of std::addressof
boost::
and BOOST_ prefixes
error_code.
error_code::to_string,
error_condition::to_string, error_code::what.
system_error::what()
now contains the source location, if present.
result<T, E = error_code>,
a class holding either a value or an error, defined in <boost/system/result.hpp>.
<boost/variant2.hpp>.
unsafe_get<I>.
visit_by_index.
operator<<.
Boost's primary test compilers are:
Marshall Clow, Michael Caisse and Glen Fernandes 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.