Performance improvements
asio refactored SFINAE reducing compile time; container swapped to Boost exceptions cutting header size.
asio refactored SFINAE reducing compile time; container swapped to Boost exceptions cutting header size.
Added 3 dependencies across 3 libraries; removed 21 across 9 libraries per release notes.
JSON patch fixes floating‑point parsing, link errors, and boost build on GCC 4.8; Log race condition resolved.
container added [[no-discard]] attribute; pfr comparison functions now constexpr; regex header‑only mode
April 16th, 2021 21:05 GMT
ip::scope_id_type type alias.
ip::port_type type alias.
std::hash specialisations for IP addresses.
std::hash specialisations for ip::basic_endpoint<>.
any_io_executor
to a "strong typedef"-style class.
experimental::as_single
to work with handler hook deprecation.
errno is
not overwritten if socket() fails on macOS/FreeBSD.
io_context
and thread_pool executors
when move-assigned.
call_stack
objects are accessed only from implementation files.
blocking.always
property from being used with strand<>, as it did not produce the
correct semantics.
boost::bind.
boost::apply to use variadic templates
and perfect forwarding.
boost/container/vector.hpp
preprocessed file size reduces from 1,5MB to 930KB. If you still
want to use standard exception classes, you can define BOOST_CONTAINER_USE_STD_EXCEPTIONS
before using any Boost.Container class.
pmr::map with a std::pair; works when using a
std::tuple".
boost/core/cmath.hpp, a portable implementation
of the floating point classification functions from <cmath>.
boost/core/bit.hpp, a portable implementation
of the C++20 standard header <bit>.
BOOST_TEST_EQ,
BOOST_TEST_NE for
character types under C++20.
allocator_traits.)
boost::dll::import
was renamed to boost::dll::import_symbol
to avoid collision with C++20 import
keyword.
path::remove_filename
if the path is "////". (#176)
create_directories
disregarding errors from file status query operations issued internally.
This could result in incorrect error codes returned by create_directories. (#182)
linear_slist_algorithms
use a simple node_ptr instead of std::pair on return.
list/slist use operator
</operator
== instead of std::equal_to/std::less.
wchar_t API support
for named resources in operating systems that offer native wide character
API (e.g. Windows). The following classes were updated with wchar_t name support:
file_mapping
managed_mapped_file
managed_shared_memory
managed_windows_shared_memory
shared_memory_object
windows_shared_memory_object
file_lock
named_condition
named_condition_any
named_mutex
named_recursive_mutex
named_semaphore
named_sharable_mutex
named_upgradable_mutex
message_queue
BOOST_INTERPROCESS_FORCE_NATIVE_EMULATION
macro option to disable the use of generic emulation code for process
shared synchronization primitives instead of native POSIX or Winapi
functions.
value_from
implementation; user customizations are now always preferred over
library-provided overloads.
unbounded_fifo_queue
policy of the asynchronous_sink
frontend. The race could be detected by TSAN, but it was not
a real problem on most current CPU architectures and compilers.
(#139)
channel_logger), the channel
attribute is now deep-copied from the original logger. This
means that modifying the channel in the new logger will no
longer affect the original logger.
std::allocator<void> in template parameters
with a new tag type boost::log::use_std_allocator
to silence libc++ warnings about the former being deprecated
in C++17 and later. The tag indicates that the instantiated
template should be using a specialization of std::allocator internally to allocate
dynamic memory, so the change has no functional effect. (#141)
__MSVCRT_VERSION__
macro on MinGW and MinGW-w64. Defining this macro caused incompatibility
with UCRT, which is available as an option in recent MinGW-w64.
(PR#149)
<execution>).
open) a file stream that has been
closed
__MSVCRT_VERSION__
[[likely]]
instead of compiler-specific markup to indicate when TRY has
likely success or failure.
spare_storage(const
basic_result|basic_outcome *)
noexcept was not propagated
over BOOST_OUTCOME_TRY,
which causes things like stack backtraces captured at the point
of construction of an errored result to get dropped at every
TRY point.
This has been fixed by adding an optional spare_storage
to success_type<T> and failure_type<T>, as well as to auto success(T
&&, ...)
and auto failure(T
&&, ...).
BOOST_NO_EXCEPTIONS
defined. Thanks to Emil, maintainer of Boost.Exception, making
a change for me, Boost.Outcome should now compile with C++
exceptions globally disabled. You won't be able to use boost::exception_ptr as it can't
be included if C++ exceptions are globally disabled.
BOOST_OUTCOME_TRY
had been broken since the inception of this library for certain
corner case code, which required a breaking change in how TRY
works. See the
changelog in the documentation for more detail.
const
in SFINAE expressions in template constructor. Now reflection of
aggregates with std::optional<std::chrono::duration<???>> fields works on any
Standard Library implementation, even if LWG3050 is not fixed.
constexpr
#52
ARCH_PPC_64 predef.
ARCH_WORD_BITS* redefinition warnings/errors.
ARCH_E2K, Elbrus
2000, architecture from Konstantin Ivlev.
WORD_BITS set
of predefs to detect the architecture word size. Initial implementation
inspired by submission from Mikhail Komarov.
Boost's primary test compilers are:
Boost's additional test compilers include:
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.