New libraries
One new repository adds C++11 backports of later‑standard components to the ecosystem.
One new repository adds C++11 backports of later‑standard components to the ecosystem.
Iteration speed rises in concurrent_flat_map, filesystem recursive_directory_iterator reuses type info, and UUID code generation is optimized for AVX.
Three dependencies added, eight removed across three libraries; Boost.Timer dropped Boost.Chrono/Boost.System, many modules now prefer std.
Numerous bug fixes improve stability, including ASan failure fixes, strong guarantee fixes, and infinite loop prevention.
Added constexpr byteswap, new is_iterator trait, unique_any class, and docs migrated to Quickbook.
August 11th, 2023 16:23 GMT
These are patches from library authors which were found too late to be fixed in the release.
boost::anys::unique_any C++11 class - an alternative
to boost::any (or to std::any)
that does not require copy or move construction from the held type.
atomic_ref
for const-qualified
types. Note that even const-qualified
atomic objects must still reside in read-write memory. (#62)
latch.hpp, an implementation of std::latch (contributed by Christian
Mazakas.)
shared_lock.hpp,
a (partial) implementation of std::shared_lock
(contributed by Christian Mazakas.)
boost::core::type_name.
boost/core/bit.hpp
are now constexpr on
recent MSVC versions (VS2019 update 5 and later.)
boost::core::byteswap (an implementation of
std::byteswap from C++23) to boost/core/bit.hpp.
sp_thread_pause,
sp_thread_yield,
sp_thread_sleep from
SmartPtr implementation details to boost/core/yield_primitives.hpp.
directory_entry::refresh
method that updates internal cached file statuses for the directory
entry identified by path.
directory_entry
constructors and modifiers that initialize or modify the path now
automatically call refresh.
This may result in errors that were not indicated before and in
v3, if querying the filesystem for
file statuses fails (e.g. if the file does not exist). This new behavior
is similar to std::filesystem.
directory_entry
constructors and methods taking file_status
parameters are removed. Users are recommended to remove these arguments
and rely on directory_entry
calling refresh internally.
directory_entry
member methods for checking the file type of the file, similar to
std::filesystem.
is_block_file,
is_character_file,
is_fifo, is_socket and is_reparse_file.
recursive_directory_iterator
is now more likely to reuse information about the file type that
is obtained during filesystem iteration. This may improve performance.
(#288)
boost/filesystem/fstream.hpp
are now movable, if the standard library file streams are. (#280)
boost/filesystem/cstdio.hpp
with a portable fopen
overload that takes path
as the first argument. This function is equivalent to std::fopen, except that on Windows it
uses the native wide character encoding for paths.
path comparison
operators are now more restricted to avoid potential ambiguities
when user's code contains a using
namespace boost::filesystem; directive. (#285)
path constructors
from iterators could interfere with function overloads taking a
std::initializer_list argument. (#287)
boost::flyweight
(operator*
and operator->
dereferencing to the underlying value).
simple_locking was not
recursive (issue #12).
is_iterator
type trait that allows to test whether the type qualifies as an iterator
type.
filter_iterator now
supports move-construction of the adopted iterator and the function
object. (PR#79)
system_error,
except for when allocation failed, in which case std::bad_alloc
is thrown.
serialize_options.
parse_options
in stream operator<<.
Infinity
and NaN JSON literals.
INT_MAX
are accepted by the parser and treated as infinity.
object member
functions that should provide strong guarantee.
end
call when boost/range.hpp is included.
error::size_mismatch.
localization_backend_manager::get
is deprecated, use the generator instead
to_utf/from_utf/between
long long
as the count parameter for pluralized translations
text_file_backend,
when the size of a formatted log record exceeds the rotation_size limit. (#209)
<stdfloat>
types 978.
-Wmaybe-uninitialized
warnings
round and
trunc functions for
non-representable numbers 968.
mp_from_sequence,
mp_iota, mp_iota_c.
mp_value,
mp_list_v, mp_rename_v, mp_is_value_list.
<boost/mp11/list.hpp>.
mp_repeat,
mp_fill, mp_at, mp_back,
mp_take, mp_pop_back, mp_drop,
mp_insert, mp_erase.
insert
in non-unique ordered indices to preserve insertion order of equivalent
elements (issue #68).
std::size_t
instead of unsigned long to save and load the size of
a multi_index_container
(unsigned long
is smaller than std::size_t
in LLP64 data models). multi_index_container
serialization class
version has been bumped from 3 to 4 to reflect this change.
SELECT statements producing data
and procedures with OUT
parameters.
connection::execute and connection::start_execution
functions (and their async counterparts). These superseed connection::query, connection::execute_statement,
connection::start_query and connection::start_statement_execution.
The new functions allow access to new features, like the static interface.
boost/mysql/src.hpp,
which must be included in exactly one translation unit.
statement::bind
and connection::execute. This enables use cases
where the number and type of parameters is not known at compile-time.
bool, std::optional
and boost::optional.
min() and max() macros.
BOOST_RATIO_VERSION
to 2.
BOOST_RATIO_EXTENSIONS
is now deprecated and will eventually be removed when Boost.Ratio
is implemented in terms of the standard <ratio>
header.
BOOST_TIMER_ENABLE_DEPRECATED
is defined.
boost::concurrent_flat_map, a fast, thread-safe
hashmap based on open addressing.
erase(iterator), which previously returned nothing,
now returns a proxy object convertible to an iterator to the next
element. This enables the typical it
= c.erase(it) idiom without incurring any performance
penalty when the returned proxy is not used.
lddqu instruction
on SSE3 targets, which penalize performance on Intel NetBurst CPUs
but is more optimal on Skylake and later CPUs. (PR#138)
uses_double_storage().
Boost's primary test compilers are:
Marshall Clow 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.