This is an older version of Boost and was released in 2019.
The current version is 1.89.0.
Version 1.70.0
April 12th, 2019 06:04 GMT
Documentation
Known Issues
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.
-
Fix moved-from executor in idle ping timeout (#1599)
New Libraries
- Outcome:
- A set of tools for reporting
and handling function failures in contexts where directly
using C++ exception handling is unsuitable, from Niall Douglas.
- Histogram:
- Fast and extensible
multi-dimensional histograms with convenient interface for C++14, from
Hans Dembinski.
Updated Libraries
-
Asio:
-
This release includes a number of new features, bug fixes, performance
enhancements, and documentation improvements. Notable changes include:
-
Added the ability to use custom I/O executors with I/O objects
(such as sockets).
-
Added a new
async_result
form with an initiate
static member function.
-
Updated the Coroutines TS support and promoted it to the
asio
namespace.
-
Added a new
DynamicBuffer_v2
concept which is CopyConstructible.
-
Added a new
async_compose
function that simplifies the implementation of user-defined
asynchronous operations.
-
Added a
make_strand
helper function.
-
Relaxed the completion condition type requirements to only
require move-constructibility rather than copy-constructibility.
-
Added a constructor for
local::basic_endpoint
that takes a string_view
.
-
Added the noexcept qualifier to various functions.
-
Added a new
BOOST_ASIO_DISABLE_VISIBILITY
configuration #define
.
-
Enabled recycling of the memory used to type-erase a function
object with the polymorphic executor.
-
Changed receive operations to return the correct number of
bytes transferred when truncation (
error::message_size
)
occurs on a datagram-oriented socket.
-
Fixed calculation of absolute timeout when the backend uses
pthread_cond_timedwait
.
-
Changed the range-based asynchronous connect operation to deduce
the
EndpointSequence
iterator type.
-
Fixed
buffer_sequence_begin
and buffer_sequence_end
to prevent implicit conversion.
-
Ensured SSL handshake errors are propagated to the peer before
the local operation completes.
-
Suppressed the
eof
error on SSL shutdown as it actually indicates success.
-
Added a fallback error code for when we OpenSSL produces an
SSL_ERROR_SYSCALL
result without an associated error.
-
Changed composed asynchronous read and write operations to
move buffer sequence objects.
-
Fixed a macOS-specific warning about the deprecation of
OSMemoryBarrier
.
-
Fixed compile errors that occur when using the composed read
and write operations with MSVC 11.0.
-
Improved
dispatch
,
post
and defer
documentation.
-
Fixed a Windows-specific memory leak that may occur when
system_executor
is used.
-
Consult the Revision
History for further details.
-
Beast:
BIG
Update!!!
-
Some APIs have changed.
-
The reference
shows a star ★ next to each new item.
-
Beast needs your help!
-
More tutorials, code like the pros!
-
basic_stream
and tcp_stream
offer:
-
Timeouts:
async_read_some
,
async_write_some
complete with error::timeout
on expiration!
-
Traffic-shaping policies
simple
and unlimited
, or a user-defined
RatePolicy!
-
Put the strand directly on the socket using P1322R0,
no more
bind_executor
at call sites!
-
Base classes
async_base
and stable_async_base
and handle
all composed operation boilerplate for you.
-
ssl_stream
provides a movable,
assignable SSL stream with a flat write optimization.
-
All asynchronous operations use Asio's
async_initiate
for efficient integration with Coroutines TS.
-
⚡ faster compilation,
define
BOOST_BEAST_SEPARATE_COMPILATION
and #include <boost/beast/src.hpp>
in one of your .cpp files!
-
See the full Release
Notes for a complete list of changes.
-
Context:
-
#91: cleanup of stack if creating ucontext fails
-
#97: add missing BOST_CONTEXT_DECL in stack_context
-
#98: fix jump_i386_sysv_macho writing garbage to the x87
control word
-
Coroutine2:
-
#28: don't crash on pthread_cancel
-
DLL:
-
New macro BOOST_DLL_USE_STD_FS.
Define it to
1
to make
the Boost.DLL use C++17's std::filesystem::path
,
std::system_error
and std::error_code
(#21). Note that
exception types change from boost::system::system_error
to std::system_error
, so make sure to update
catch
es.
-
Significant rewrite of the dynamic loadable detection and decoration
logic. More precise errors are now reported in case of loading failures.
Added
shared_library::decorate()
function that returns a decorated
path to the library without doing any platform related queries and
detections. Prefer using shared_library::load
and shared_library
constructors for better results (many thanks to Loïc Touraine for
the work PR#23).
-
CI hardening, docs updates, typos fixes, cleanups and many portability
fixes.
-
Dynamic Bitset:
-
Disabled hardware-assisted popcount (added in 1.69.0) on MSVC due
to undefined behavior on older CPUs. (#33 PR#35)
-
Fiber:
-
#191: ignore unused argument warning
-
#196: fix high contention on remote_ready_splk_
-
Filesystem:
-
Fixed a few instances of dereferencing
std::string::end()
in path
implementation.
-
Fixed program termination in case of out of memory condition in directory
iterators constructors and operations accepting a reference to
error_code
. (#58)
-
Fixed possible linking errors caused by missing definitions of static
members of
path
.
(#12759)
-
Fixed possible use of uninitialized data in directory iterator increment
operation on Linux.
-
Added support for movability to directory iterators.
-
Added file status query overloads for
directory_entry
.
This avoids a relatively expensive OS query when file status is requested
for a result of dereferencing a directory iterator. (PR#55)
-
Reworked
current_path
and read_symlink
implementation to avoid possible memory exhaustion on broken or tampered
with filesystems. The functions now have an internal limit of the
path size they will accept from the OS, which is currently 16 MiB.
-
Increased the size of the internal buffer used by
copy_file
.
-
Integer:
-
Added Extended Euclidean Algorithm and Modular Multiplicative Inverse
function. (Nick Thompson, PR#11)
-
Log:
-
New features:
-
Added support for generating another log file name before collecting
the file in the text file sink backend. This allows to combine
appending to an existing log file with timestamps and file
counters in log filenames, and, consequently, file collection
in general.
-
See changelog
for more details.
-
Math:
-
New features:
-
Add Lanczos smoothing derivatives
-
Move
numerical_differentiation.hpp
from boost/math/tools/
to boost/math/differentiation/finite_difference.hpp
.
-
Add mean, variance, skewness, kurtosis, median, Gini coefficient,
and median absolute deviation to
tools/univariate_statistics.hpp
.
-
Add correlation coefficients and covariance to
tools/bivariate_statistics.hpp
-
Add absolute Gini coefficient, Hoyer sparsity, oracle SNR,
and the M[sub 2]M[sub
4] SNR estimator to
tools/signal_statistics.hpp
.
-
Add total variation, l0, l1, l2, and sup norms, as well as
corresponding distance functions to
tools/norms.hpp
.
-
Add move constructors for polynomials, support complex coefficients,
add
.prime()
and .integrate()
methods.
-
Add
quadratic_roots
to tools/roots.hpp
.
-
Add support for complex-valued functions to Newton's method
in
roots.hpp
.
-
Add Catmull-Rom interpolator.
-
Mp11:
-
Renamed
mp_invoke
to mp_invoke_q
-
Added
mp_similar
-
Added
mp_set_union
,
mp_set_intersection
,
mp_set_difference
-
Added
mp_not_fn
-
Added
mp_transform_first
,
mp_transform_second
,
mp_transform_third
-
Added
mp_filter
-
Added
mp_eval_if_not
,
mp_eval_or
, mp_valid_q
-
Added
mp_back
, mp_pop_back
-
Multi-index Containers:
-
size_type
and difference_type
are now defined
as the allocator's same-named types. This will not make any difference
in the vast majority of cases, but allows for some degree of control
of resulting internal structures via user-defined allocator types
(see issue #17 for motivation). For the moment being,
this change is not documented in the reference section (i.e., it
has semi-official status).
-
Maintenance work.
-
Multiprecision:
-
Fix various conversion issues in the traits classes, check for compatibility
with Boost.Optional.
-
Prevent instantiation of
std::numeric_limits
on any old type when checking for convertibility. See #98.
-
Update variable precision code to account for arbitrary precision
integers. See #103.
-
Add support for XML serialization archives.
-
Fix bug in fixed precision iostream formatting in
mpf_float
and mpfr_float
. See
#113.
-
Add more overloads for special functions which are better handled
natively by MPFR.
-
Fixed bug in generic
exp
implementation which could cause invariant failure.
-
Fixed generic conversion from float to integer to avoid undefined
behaviour. See #110.
-
PolyCollection:
-
Improved handling of stateful allocators and allocator propagation
traits, after an error reported by Billy O'Neal (PR#9).
-
Fixed a potentially serious bug with an internal cache structure.
-
Spirit:
-
Removed use of deprecated
boost/detail/iterator.hpp
header. PR#432
-
X3
-
Integer parsers should now handle user defined types. PR#429
-
Note: The
check_overflow
trait default implementation now relies on std::numeric_limits<T>::is_bounded
instead of boost::integer_traits<T>::is_integral
.
-
Removed sequence into plain parsing. Now it triggers a compile
time error instead of silently parsing the the sequence and
taking the last value as a result. PR#439
-
Fixed
parse_rule
instantiation with BOOST_SPIRIT_INSTANTIATE
when:
-
A rule has no attribute. PR#455
-
An actual attribute is not of type a rule was declared
with. PR#456 #457
-
A huge thanks goes out to
Xeverous for
reporting a regression in #453.
-
Fixed unneded attribute synthesization and no-transformation
attribute reference pass-through in rules. #444 PR#449 PR#452
-
Removed broken 1.0#INF parser. It was poorly documented and
never worked. #415 PR#458 #8699
-
The undocumented
make_attribute
trait was removed due to bugs PR#449
and to simplify
attribute transformation. PR#460
-
If you were using it to workaround bugs in attribute transformation
- they should not be needed anymore as of this release.
-
The integer value parser now respects
std::numeric_limits<T>::digits10
value. PR#469
-
Fixed underflow check for a
(Min %
Base)
== 0
corner case. PR#469
-
Fixed an output value on overflow of IgnoreOverflowDigits=true
integer parser. PR#470
-
Container attribute elements were copyied, but not moved. PR#472
-
Special handling of references in
transform_attribute
was removed. PR#480
-
V2
-
Macro name collisions and namespace conflicts with Boost.Endian
were fixed. PR#349 PR#482
-
utree
-
Fixed UB in tag getter due to left shift of negative
value. PR#423
-
Fixed double-conversion (
spirit::string
-> std::string
-> spirit::string
).
PR#462
-
Qi
-
Added static asserts for rule skipper type problems.
PR#427
-
The
check_overflow
trait default implementation now relies on std::numeric_limits<T>::is_bounded
instead
of boost::integer_traits<T>::is_integral
PR#429
-
Integer parsers should now handle user defined types.
PR#429
-
Note: The
check_overflow
trait
default implementation now relies on std::numeric_limits<T>::is_bounded
instead of boost::integer_traits<T>::is_integral
.
-
Removed broken 1.0#INF parser. It was poorly documented
and never worked. #415 PR#458 #8699
-
The undocumented
make_attribute
trait was merged into transform_attribute
trait. PR#471
-
The
pre_transform
,
post_transform
,
and fail_transform
utility functions were removed in favor of directly using
pre
/post
/fail
of the transform
trait. PR#467
-
The integer value parser now respects
std::numeric_limits<T>::digits10
value. PR#469
-
Fixed underflow check for a
(Min %
Base)
== 0
corner case. PR#469
-
Fixed an output value on overflow of IgnoreOverflowDigits=true
integer parser. PR#470
-
Special handling of references in
transform_attribute
was removed. PR#480
-
Lex
-
Fixed UB in default constructor of lexer with user specified
token type. PR#420
-
Classic:
-
Fixed
position_iterator
forming reference to local when the underlying iterator dereference
operator returns a non-reference type. PR#422 #9737
-
Stacktrace:
-
Build fix for iOS 32-bit ARM (many thanks to Ivan Ponomarev for providing
the fix PR#70)
-
Fixed multiple typos, warnings and updated the docs.
-
Test:
-
Boost.test v3.10 see the Changes
log for more details.
-
Breaking changes:
-
Boost.Test
minimal.hpp
is now showing a deprecation warning,
-
Change in floating point comparison may fail tests that were
silently not using the floating point comparison logic prior
to this release,
-
Internal API change to
unit_test_log_formatter
,
see detailed change log,
-
New feature:
-
Floating point comparison has been extended to capture non-floating
point and arithmetic operands: expressions like
BOOST_TEST(3.0001 ==
3)
now use floating point support of Boost.Test,
-
Custom datasets are not required to declare the
sample
type field anymore,
-
Extending template test cases from
std::tuple
to any variadic definition,
-
Windows support for timed tests,
-
Timed test on test-suites,
-
Removed dependency to Boost.Timer,
-
New macro
BOOST_TEST_INFO_SCOPE
for scoped context declaration,
-
Improved
BOOST_TEST_CONTEXT
syntax
-
Bug fixes and pull requests:
-
Trac tickets: #7397, #9434, #13106, #13418
-
GitHub Issues: #133, #138, #141, #157,
#160, #174, #176, #177, #180,
#181, #194, #196, #198, #199,
#202, #203, #204
-
GitHub Pull Requests: PR#171, PR#172, PR#182,
PR#183, PR#184, PR#190, PR#195,
PR#195, PR#197, PR#205
-
TypeIndex:
-
Support for the GHS C++ compiler added (many thanks to Brandon Castellano
for providing the patch PR#28)
-
Optimized string and type comparisons (many thanks to Andrey Semashev
for providing the patch PR#23)
-
Fixed clang-win compilation (many thanks to Peter Dimov for providing
the patch PR#25)
-
CI hardening.
-
TypeTraits:
-
Added is_bounded_array and is_unbounded_array (Glen Fernandes).
-
Added copy_reference and copy_cv_ref (Glen Fernandes).
-
Improved support for msvc with /clr option.
-
Misc compiler compatibility fixes.
-
Variant:
-
Many cleanups and internal improvements, many thanks to Nikita Kniazev
(PR#55, PR#56, PR#57) and Louis Dionne
(PR#51)
-
CI hardening.
-
uBlas:
-
Addition of tensor framework (many thanks to Cem Bassoy PR#65)
-
Addition of basic OpenCL support (many thanks to Fady Essam PR#59)
-
Integration of basic benchmark suite (many thanks to Stefan Seefeld
PR#57)
-
CI integration and hardening
Compilers Tested
Boost's primary test compilers are:
-
Linux:
-
Clang: 3.0, 4.0.1, 6.0.1
-
Clang, C++0x: 3.0
-
Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
-
Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2,
6.0.1, 7.0.0, 8.0.0
-
Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
-
GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1
-
GCC, C++0x: 4.4.7
-
GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
-
GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1
-
GCC, C++17: 7.3.0, 8.0.1
-
Intel, C++14: 18.0
-
OS X:
-
Apple Clang: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++17: 9.1.0, 10.0.0
-
Apple Clang, C++1z: 9.0.0
-
Apple Clang, C++2a: 10.0.0
-
Windows:
-
GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
-
GCC, C++0x: 4.6.4
-
GCC, C++11: 4.7.3, 4.8.1, 4.9.3
-
GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
-
GCC, C++17: 7.1.0, 7.2.0, 7.3.0
-
Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
-
FreeBSD:
-
Clang: 4.0.0
-
Clang, C++11: 4.0.0
-
Clang, C++14: 4.0.0
-
Clang, C++1z: 4.0.0
Boost's additional test compilers include:
-
Linux:
-
Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1
-
Clang, C++0x: 3.0
-
Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
-
Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2,
6.0.1, 7.0.0, 8.0.0
-
Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
-
GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1
-
GCC, C++0x: 4.4.7
-
GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
-
GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0
-
GCC, C++17: 7.3.0, 8.0.1
-
Intel, C++14: 18.0
-
OS X:
-
Apple Clang: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++17: 9.1.0, 10.0.0
-
Apple Clang, C++1z: 9.0.0
-
Apple Clang, C++2a: 10.0.0
-
Windows:
-
GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
-
GCC, C++0x: 4.6.4
-
GCC, C++11: 4.7.3, 4.8.1, 4.9.3
-
GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
-
GCC, C++17: 7.1.0, 7.2.0, 7.3.0
-
Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
-
FreeBSD:
-
Clang: 4.0.0
-
Clang, C++11: 4.0.0
-
Clang, C++14: 4.0.0
-
Clang, C++1z: 4.0.0
Acknowledgements
Daniel James, Vladimir Prus, Marshall Clow and Michael Caisse managed this
release.