Performance improvements
async_initiate now deduces return types, reducing compile time and memory overhead.
async_initiate now deduces return types, reducing compile time and memory overhead.
Added: 4 dependency additions across 3 libraries; removed: 8 removals across 7 libraries.
Fixed serial port RTS flag, lost work count, and lexically_relative path handling bugs.
cpp_int and float128 now fully constexpr; added C++20 __VA_OPT__ support in preprocessor macros.
December 11th, 2019 18:06 GMT
These are patches from library authors which were found too late to be fixed in the release. Be careful as they have not been through the normal testing process.
async_initiate
helper function to automatically deduce its return type, for C++11
or later.
async_initiate.
rebind_executor
to all I/O object types.
executor_type
and member function get_executor().
default_completion_token
trait, giving I/O executor types an associated default completion
token type for use with asynchronous operations. This trait is specialised
for the use_awaitable
completion token, for example, to allow asynchronous operations to
be used as follows: co_await
socket.async_connect(my_endpoint).
async_initiate
to the Windows-specific I/O objects' asynchronous operations.
Protocol
copy and move operations never throw.
Endpoint
default constructor and move operations never throw.
noexcept qualifier
to protocol accessors.
noexcept qualifier
to socket move constructors.
__float128
not being considered as a floating point type by some versions of
libstdc++.
max_size() now takes the allocator's max_size()
into account. (Glen Fernandes)
endian_reverse,
conditional_reverse
and *_to_* constexpr
on GCC and Clang
data(); changed its return type to unsigned char*
__int128 support
to endian_reverse
when available
boost/endian.hpp
filesystem_error
to exception.hpp; file_status
and associated enums and functions to file_status.hpp;
directory_entry,
directory_iterator
and recursive_directory_iterator
to directory.hpp.
operations.hpp still includes the new headers
exception.hpp, file_status.hpp
and directory.hpp, unless BOOST_FILESYSTEM_NO_DEPRECATED
macro is defined. These implicit includes are considered deprecated
and will be removed in a future release. Users are encouraged to
include the new headers directly or include filesystem.hpp.
filesystem_error
exception is now implemented in the compiled library of Boost.Filesystem.
Users may need to add linking with Boost.Filesystem library in their
projects.
utimensat
instead of utime.
utime is declared
obsolete in POSIX.1-2008 and can be disabled e.g. in uClibc-ng. (PR#115)
directory_iterator
is now left in the end state on memory allocation errors.
directory_iterator
on POSIX systems, support for readdir/readdir_r has been reworked to
avoid memory allocations for dirent
structures when readdir
is used. This reduces memory consumption and eliminates the possibility
of buffer overruns in case if readdir
produces a very long directory name.
directory_options
enum, which reflects the same named enum from C++20. The enum is
supported in directory_iterator
and recursive_directory_iterator
to customize iteration behavior. In particular, the iterators now
support skipping directories that can't be opened due to insufficient
permissions. The symlink_option
enum is now deprecated and should be replaced with directory_options.
recursive_directory_iterator
is now reset to the end state in case of errors, as required by C++20.
(#112)
directory_options::pop_on_error
option, which configures recursive_directory_iterator
so that it attempts to recover from iteration errors by repeatedly
invoking pop()
until it succeeds or the end state is reached. (#113)
directory_options::skip_dangling_symlinks
option, which configures recursive_directory_iterator
so that it doesn't follow dangling directory symlinks and continues
iteration instead of reporting an error.
recursive_directory_iterator
are now marked as deprecated: level(), no_push_pending(), no_push_request(), no_push(). Users are advised to replace their
use with the standard counterparts: depth(), recursion_pending(), disable_recursion_pending(). Note that recursion_pending() has the opposite meaning compared
to no_push_pending() and no_push_request(). Deprecated methods will be removed
in a future release.
path::lexically_relative (and any dependent
algorithms) to correctly handle empty, dot and dot-dot path elements
in its argument. The behavior is made closer to C++17 std::path::lexically_relative in that empty
and dot path elements are ignored and dot-dot path elements are accounted
by decreasing the number of dot-dot path elements to generate in
the resulting relative path. (#76)
factory
and value_factory
to provide the following features:
BOOST_NO_EXCEPTIONS)
BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY
boost::none_t
in place of void
through BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T
kernel_2d
and kernel_2d_fixed,
in Numeric extension (PR#361).
convolve_2d
(PR#367).
cached_location_t
(PR#287).
convolve_1d
in Numeric extension for convenient use of convolve_rows
and convolve_cols
(PR#347) and PR#367).
extend_boundary
in Numeric extension to perform image boundary extension (PR#386).
RELEASES.md (PR#404).
test/
directory (PR#302).
std::is_trivially_default_constructible
specializations (PR#284).
boost/math/tools/univariate_statistics.hpp
and boost/math/tools/bivariate_statistics.hpp, have been deprecated in favor
of boost/math/statistics/univariate_statistics.hpp and boost/math/statistics/bivariate_statistics.hpp.
constexpr update
allows cpp_int and float128 arithmetic to be fully constexpr with gcc and clang 9 or
later, or any compiler supporting std::is_constant_evaluated().
make
install-able, and
cmake find_package() can find it. Note that you
must separately install and find_package() Outcome's dependency, quickcpplib,
else find_package() of Outcome will fail.
find_package() uses it. This breaks the
use of the unconfigured Outcome repo as an implementation of
Outcome, one must now do one of: 1. Add Outcome as subdirectory
to cmake build. 2. Use cmake superbuild (i.e. ExternalProject_Add())
to build and install Outcome into a local installation. 3.
Use one of the single header editions.
CXX_CONCEPTS_FLAGS
to an empty string to prevent auto detection and enabling of
C++ Concepts support occurring.
OUTCOME_TRY
operation now hints to the compiler that operation will be
successful. P1886 Error speed benchmarking showed
that there is considerable gain in very small functions by
hinting to the compiler whether the expression is expected
to be successful or not. OUTCOME_TRY
previously did not hint to the compiler at all, but now it
does. A new suite of macros OUTCOME_TRY_FAILURE_LIKELY
hint to the compiler that failure is expected. If you wish
to return to the previously unhinted behaviour, define OUTCOME_TRY_LIKELY(expr)
to (!!expr).
OUTCOME_CO_TRY() operation suitable for performing
the TRY operation
from within a C++ Coroutine. Secondly, in the header outcome/coroutine_support.hpp there are implementations
of eager<OutcomeType>
and lazy<OutcomeType>
which let you more naturally and efficiently use basic_result or basic_outcome from within
C++ Coroutines -- specifically, if the result or outcome will
construct from an exception pointer, exceptions thrown in the
coroutine return an errored or excepted result with the thrown
exception instead of throwing the exception through the coroutine
machinery (which in current compilers, has a high likelihood
of blowing up the program). Both eager<T> and lazy<T> can accept any T as well. Both have been
tested and found working on VS2019 and clang 9.
make_error_code() and make_exception_ptr() are now additionally considered
for compatible copy and move conversions for basic_result<>.
This lets you construct a basic_result<T, E> into a basic_result<T, error_code>, where E
is a custom type which has implemented the ADL discovered free
function error_code
make_error_code(E),
but is otherwise unrelated to error_code.
The same availability applies for exception_ptr
with make_exception_ptr() being the ADL discovered
free function. basic_outcome<> has less support for
this than basic_result<> in order to keep constructor
count down, but it will accept via this mechanism conversions
from basic_result<> and failure_type<>.
[[nodiscard]]
support in the compiler was very mildly broken.
__VA_OPT__
construct
BOOST_PP_VARIADIC_HAS_OPT
whether __VA_OPT__
is supported at the C++20 level
BOOST_PP_CHECK_EMPTY
test for emptiness using __VA_OPT__
at the C++20 level
BOOST_PP_VA_OPT
more flexible alternative to __VA_OPT__
at the C++20 level
allocate_unique
for scalars and arrays. (Glen Fernandes)
std::string_view
has been added.
boost::exception
and no rtti mode (thanks to Mikhail Pilin / [pull_request 234])
BOOST_VMD_IS_EMPTY
updated to use __VA_OPT__
at the C++20 level has 100% reliability
Boost's primary test compilers are:
Boost's additional test compilers include:
Marshall Clow and Michael Caisse 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.