New libraries
One new library, Variant2, offers a never‑valueless, strong‑guarantee std::variant implementation.
One new library, Variant2, offers a never‑valueless, strong‑guarantee std::variant implementation.
Significant speed gains include asio handler dispatch, dynamic_bitset popcount, beast compile‑time reduction, and histogram optimizations.
Added 7 dependency additions across 5 libraries and removed 11 dependencies across 8 libraries.
Extensive bug fixes improve stability for any, filesystem, log, uuid, and many other components.
Constexpr utilities like first_scalar, allocator helpers alloc_construct, and improved parameter macros enhance usability.
August 19th, 2019 15:31 GMT
align_up and align_down.
aligned_allocator
to no longer require a specialization for void.
propagate_on_container_move_assignment
and is_always_equal
in aligned_allocator.
case
fall-through in the free function connect() implementation.
is_*_buffer_sequence detection traits
for user-defined sequence types.
CancelIoEx
entry point.
get_option() member function to be const.
shutdown function.
is_dynamic_buffer.
boost::any
is now possible.
BOOST_BEAST_SEPARATE_COMPILATION.
add
and sub. (Glen Fernandes)
is_uninitialized.
(Niklas Fejes)
equal_range can result in
a range with length greater than 1".
deque can now
have options, using deque_options.
The block size/bytes can be be specified.
static_vector
can now have options, using static_vector_options.
Alignment and throwing behaviour can be be specified.
small_vector
can now have options, using small_vector_options.
Alignment and growth factor can be be specified.
alloc_construct,
alloc_construct_n,
alloc_destroy, and
alloc_destroy_n in
<boost/core/alloc_construct.hpp> for allocator aware and exception
safe construction and destruction of objects and arrays. (Glen Fernandes)
first_scalar
in <boost/core/first_scalar.hpp> for obtaining a pointer to the
first scalar element of an array. Given a pointer of type T*
they return a pointer of type remove_all_extents_t<T>*. (Glen Fernandes)
noinit_adaptor
in <boost/core/noinit_adaptor.hpp> which is an allocator adaptor
that converts any allocator into one whose construct(ptr) performs default initialization
via placement new, and whose destroy(ptr) invokes the value_type
destructor directly. (Glen Fernandes)
default_allocator
in <boost/core/default_allocator.hpp>, which can serve as a minimal
default allocator that has interface similar to C++20 std::allocator, supports configurations
with disabled exceptions and does not have std
as an associated namespace. The allocator uses operator
new and operator
delete for allocation. (Glen
Fernandes)
<boost/core/uncaught_exceptions.hpp> header, added workarounds for
better compatibility with QNX SDP 7.0 when libc++/libc++abi libraries
are used. (Andrey Semashev, #59)
<boost/detail/sp_typeinfo.hpp> header is now marked as deprecated
and will be removed in a future release. <boost/core/typeinfo.hpp>
should be used instead. (Peter Dimov)
float
and double
endian_load,
endian_store
endian_reverse
to correctly support all non-bool
integral types
endian.hpp
error_code
returned from directory iterator increment when readdir_r
is used.
path, fixed rvalue-aware
operator/
return type to return an rvalue instead of rvalue reference. This
fixes leaving a dangling reference in the user's code if the result
of operator/
is bound to a const reference. (#110)
std::string_view
in basic_formatting_ostream.
The string view can now participate in character code conversion
on output.
auto_newline
formatter and stream manipulator. It can be used to ensure
that formatted output always ends with a newline while avoiding
duplicate newlines.
auto_newline_mode named parameter
of the backend constructor or call the set_auto_newline_mode
method on the sink backend.
filter and
format named
parameters to sink constructors and convenience functions for
initializing sinks. For example, it is now possible to specify
C++11 lambda functions directly in these parameters. (#63)
boost::log::trivial::severity_level.
For filters, the support is limited to attributes with "Severity"
name.
scan_for_files
method would not find files matching that pattern in the target
storage, leaving them unmanaged. In particular, such files
would not be deleted to free target storage. (#78)
basic_formatting_ostream
and basic_record_ostream
to make it possible to overload stream output operators for
pointers to user-defined types. User-defined operator<<
overloads taking std::basic_ostream
and a pointer argument should now be picked up by the compiler
when the pointer is being written to one of Boost.Log streams.
(#84)
sequence, one_of_c,
one_of, repeated_one_of, repeated_one_of1, one_char_except_c, one_char_except.
BOOST_METAPARSE_STRING
does not use out of range character values as template arguments.
any_of_c<>
does not create empty array in C++14.
alloc_construct_n
and alloc_destroy_n
facilities from Core. (Glen Fernandes)
const_mem_fun
and mem_fun
for differently qualified member functions (issue #24).
key specification syntax
now correctly handles noexcept-specified
member functions (issue #24).
version.hpp and revision.hpp
into detail, and added the Boost licence boilerplate to the
top of every source file which was missing one (I think). Also
took the opportunity to run the licence restamping script over
all Outcome, so copyright dates are now up to date.
OUTCOME_TRY
implementation to use more clarified customisation points capable
of accepting very foreign inputs. Removed the std::experimental::expected<T,
E>
specialisations, as those are no longer necessary. Fixed the
documentation for the customisation points which previously
claimed that they are ADL discovered, which they are not. Added
a recipe describing how to add in support for foreign input
types.
motivation/plug_error_code
specifically for Boost.
OUTCOME_VERSION_MINOR
hadn't been updated to 1.
trait::is_exception_ptr_available<T> was always true, thus causing
much weirdness, like not printing diagnostics and trying to
feed everything to make_exception_ptr().
std::basic_outcome_failure_exception_from_error() was being defined twice for
translation units which combine standalone and Boost Outcome's.
BOOST_PARAMETER_TEMPLATE_KEYWORD
(PR#15).
BOOST_PARAMETER_NESTED_KEYWORD
from Accumulators
to this library (PR#28).
std::reference_wrapper
and std::ref()
(PR#16).
boost::parameter::required, boost::parameter::optional,
and boost::parameter::deduced metafunction definitions
to their own header files in directory boost/parameter (PR#18).
BOOST_PARAMETER_NAME((object-name), namespace-name) qualifier(tag-name)) and BOOST_PARAMETER_NAME(qualifier(name)). (Existing code that uses qualifiers
directly and correctly with BOOST_PARAMETER_FUNCTION
and other code generation macros should remain unaffected for now,
so no breaking changes.) The reason for the change in usage is to
enable applying of parameter category constraints to Boost.Parameter-enabled
functions and constructors invoked through argument composition.
(Otherwise, it is currently possible to use argument composition
to bypass parameter category constraints applied in BOOST_PARAMETER_FUNCTION et. al.)
parameter::parameters::operator() can accept non-const
rvalues. As a positive side effect, Boost.Parameter-enabled
functions and constructors are no longer bound by BOOST_PARAMETER_MAX_ARITY
on compilers that support perfect forwarding. User code can now check
for this support by detecting the configuration macro BOOST_PARAMETER_HAS_PERFECT_FORWARDING,
or manually turn off this support by defining the configuration macro
BOOST_PARAMETER_DISABLE_PERFECT_FORWARDING.
boost::parameter::is_argument_pack
(PR#27), boost::parameter::are_tagged_arguments
(PR#52), and boost::parameter::result_of::compose
(PR#75).
boost::parameter::compose() which takes in named arguments
and returns them in an argument pack (PR#52). For compilers
that do not support perfect forwarding, the configuration macro
BOOST_PARAMETER_COMPOSE_MAX_ARITY
determines the maximum number of arguments that boost::parameter::compose() can take in (PR#61).
BOOST_PARAMETER_BASIC_FUNCTION_CALL_OPERATOR,
BOOST_PARAMETER_BASIC_CONST_FUNCTION_CALL_OPERATOR,
BOOST_PARAMETER_NO_SPEC_FUNCTION,
BOOST_PARAMETER_NO_SPEC_MEMBER_FUNCTION,
BOOST_PARAMETER_NO_SPEC_CONST_MEMBER_FUNCTION,
BOOST_PARAMETER_NO_SPEC_FUNCTION_CALL_OPERATOR,
BOOST_PARAMETER_NO_SPEC_CONST_FUNCTION_CALL_OPERATOR,
BOOST_PARAMETER_NO_SPEC_CONSTRUCTOR,
and BOOST_PARAMETER_NO_SPEC_NO_BASE_CONSTRUCTOR
(PR#52).
BOOST_PARAMETER_CAN_USE_MP11,
or manually turn off this support by defining the configuration macro
BOOST_PARAMETER_DISABLE_MP11_USAGE.
weak_ptr
weak_ptr<T>::empty()
enable_shared_from,
shared_from, and
weak_from
name(), source_location() and source_line() for the default constructed frame with thread sanitizer builds
in C++98 mode.
name() and source_location() on MSVC #78.
BOOST_TEST
can be used to compare abstract types
ostream_string
in <boost/utility/ostream_string.hpp> to optimally write any kind of
string content to an output stream. It satisfies the requirements
of [ostream.formatted.reqmts]. (Glen Fernandes)
basic_string_view
and basic_string_ref
to write directly to the rdbuf
stream buffer. (Glen Fernandes)
BOOST_UUID_COMPAT_PRE_1_71_MD5
to keep the result in a format compatible with 1.66 through 1.70.
This does not affect the default name-based uuid generation which
is based on SHA1. (PR#109)
boost::apply_visitor
with variants passed by non const reference in PR#68. Many
thanks to Ed Catmur for providing the fix.
BOOST_VARIANT_DO_NOT_SPECIALIZE_STD_HASH
could be defined to avoid those specializations.
evaluate()
or transform()).
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.