Version 1.58.0
April 17th, 2015 07:53 GMT
Documentation
Known Issue
-
Boost.Python will fail to build if it is compiled against a version of
python that is one of: 3.0.X, 3.1.X, 3.2.X, 3.3.X. Versions 2.X and 3.4+
are not affected. This is fixed in git.
-
Boost.Fusion has a regression with non-constexpr types. #11211
This
is fixed in some PRs: Github
PR #70, Github
PR #71, Github
PR #72
Patches:
New Libraries
- Endian:
-
Types and conversion functions
for correct byte ordering and more regardless of processor endianness.
- Sort:
-
Includes spreadsort, a general-case
hybrid radix sort that is faster than O(n*log(n))
Updated Libraries
-
Asio:
-
Ensured errors generated by Windows'
ConnectEx
function are mapped to their portable equivalents (#10744).
-
Added new macro
BOOST_ASIO_DISABLE_CONNECTEX
to allow use of ConnectEx
to be explicitly disabled.
-
Fixed a race condition in
windows::object_handle
when there are pending wait operations on destruction (#10624).
-
Fixed IPv6 address parsing on FreeBSD, where a trailing scope ID
would cause conversion to fail with
EINVAL.
-
Worked around shared library visibility issues by ensuring Asio types
use default visibility (#9465, #11070).
-
Changed the SSL wrapper to call the password callback when loading
an in-memory key (#10828).
-
Fixed false SSL error reports by ensuring that the SSL error queue
is cleared prior to each operation.
-
Fixed an
ssl::stream<>
bug that may result in spurious 'short read' errors.
-
Removed a redundant null pointer check in the SSL engine (#10088).
-
Added options for disabling TLS v1.1 and v1.2 (#10690).
-
Removed use of deprecated OpenSSL function
ERR_remove_state.
-
Fixed detection of various C++11 features with Clang (#8835,
#10884).
-
Fixed detection of C++11
std::addressof
with g++ (#10982).
-
Changed multicast test to treat certain
join_group
failures as non-fatal.
-
Decoupled Asio unit tests from Boost.Test (#11116).
-
Changed the tutorial to use
std::endl
to ensure output is flushed.
-
Fixed an unsigned integer overflow reported by Clang's integer sanitizer.
-
Added support for move-only return types when using a
yield_context object with asynchronous
operations.
-
Changed
yield_context
to allow reentrant calls to the completion handler from an initiating
function.
-
Updated detection of Windows Runtime to work with latest Windows
SDK.
-
Chrono:
-
Version 2.0.5
-
Fixes:
-
#10778
VC14 CTP4 Atomic don't compile with boost::chrono durations
which are not TriviallyCopyable
-
#10840
Missing std:: qualifier for puts call in test_7868.cpp
-
#10851
Missing std:: qualifier for puts call in time_point_output.cpp
-
#10893
Minor doc typo in Boost.Chrono
-
#10992
Chrono IO state savers inconsistent with Boost.IO state savers
-
#10995
duration_put::put_value truncates fractional part
-
#11006
Impossible to instantiate time_fmt_io_saver due to several
errors.
-
#11012
chrono_io v2 fail to compile with boost::chrono::duration<
boost::rational<int> >
-
Container:
-
Experimental
small_vector
container.
-
Massive dependency reorganization. Now Boost.Container
depends on very basic utilities like Boost.Core and Boost.Intrusive.
Preprocessed code size have decreased considerably and compilation
times have improved.
-
Added
nth and index_of functions to containers
with random-access iterators (except basic_string).
-
Added C++17's
allocator_traits<Allocator>::is_always_equal.
-
Updated containers to implement new constructors as specified in
2210.
Missing allocator-extended constructor for allocator-aware containers.
-
Fixed bugs:
-
Source Breaking:
scoped_allocator_adaptor's
propagate_on_container_copy_assignment,
propagate_on_container_move_assignment
and propagate_on_container_swap
are no longer ::boost::integral_constant<bool, true/false> types. The dependency reorganization
needed to break with those classes to avoid MPL dependencies, and
interoperability with std::integral_constant
was not guaranteed. Code assumming boost::true_type/boost::false_type
on this will not compile. As a workaround, use the guaranteed internal
::value
constant: ::boost::integral_constant<bool, scoped_allocator_adaptor<Allocator>::propagate_on_container_move_assignment::value>.
-
Context:
-
support for ARM/iOS (32+64 bit)
-
class execution_context (C++14)
-
Conversion:
-
polymorphic_pointer_downcast
and polymorphic_pointer_cast
functions were added (thanks to Boris Rasin) #10780
-
All the functions now throw exceptions using
boost::throw_exception
-
Documnetation update
-
DateTime:
-
Restored
to_time_t
function.
-
Renamed variable v_type to var_type so it longer conflicts with an
AIX system variable.
-
Documnetation fixes.
-
Flyweight:
-
Added hash support both with
std::hash
and boost::hash.
This can be optionally disabled
to avoid clashes with legacy code where this support has already
been defined by the user.
-
Maintenance fixes.
-
Function:
-
Added support for functions accepting C++11 rvalues and Boost.Move
rvalues #10585.
-
Functional/Factory:
-
Minor breaking change: the default template parameter to indicate
that it shouldn't use an allocator is now
void,
instead of boost::none_t.
For details, see the changelog.
-
Fusion:
-
Automatic hash creation function (Github
PR #12)
-
New ADAPT_STRUCT, ADAPT_ADT, ADAPT_ASSOC_ that deduce the members
types (#9516).
-
Add convert implementation for Boost.Tuple and std::tuple.
-
Add mpl::clear implementation for Boost.Tuple and std::tuple.
-
Use boost::declval instead of std::declval, (#10190).
-
Remove use of
boost::blank
(#8622).
-
Add result_of::{copy,move} (#5886).
-
Better constexpr and noexcept support.
-
Improved SFINAE Friendliness of many metafunctions (#10676,
#10443).
-
result_of::size::value and result_of::size::type::value are the same
type now (#7304)
-
result_of::at<Seq, N>::type is now defined when sizeof of sequence
is less than N (#6507, #7651)
-
Fix missing includes (#8457).
-
Many documentation fixes & improvements (#6090, #5324,
GitHub PR
#33, GitHub
PR #53, GitHub
PR #56)
-
Geometry:
-
Additional functionality:
-
New algorithm num_segments, returning the number of segments
of a geometry
-
New overload for is_valid algorithm, that takes a string reference
as a second argument and fills it with a message related to
the validity or invalidity of the geometry
-
New overload for is_valid algorithm, that takes an enum reference
as a second argument and fills it with a value related to the
validity or invalidity of the geometry
-
Disjoint and intersects support the following geometry combinations:
point/multipoint, multipoint/multipoint, multipoint/segment,
multipoint/box
-
Improvements:
-
Buffer now supports flat-ends for linestrings with a bend close
to the start (such that buffered segment crosses flat-end).
-
Buffer performance is improved significantly
-
Partition performance is improved significantly for polygons,
potentially enhancing all overlay operations
-
Solved tickets:
-
#8379
Invalid comparison of the result of determinant
-
#10108
Error in overlay operations in specific cases where geometries
touch at one point
-
#10201
Suggestion to use different function to compare coordinates
[wontfix]
-
#10467
Template parameter name coliding with B0 macro name defined
in termios.h
-
#10640
Invalid result of buffer() for CCW Polygons.
-
#10666
MSVC compiler warning C4127: conditional expression is constant
-
#10747
Error in rescaling causing errors in areal/areal set operations
-
#10770
Buffer fails for large distances, or rough round joins, where
concavities where not intersected properly
-
#10658
sym_difference yields bad result for int polygons
-
#10835
Difference of multilinestring and polygon yields wrong result
-
#10861
Rtree failing to compile for Value being a pair or a tuple
containing pointer to Geometry and the default equal_to<>
used
-
#10863
Template parameter name coliding with B0 macro name defined
in termios.h (duplicate of 10467)
-
#10887
Invalid result of within() and relate() for Linear/MultiPolygon
-
#10890
Invalid result of disjoint() for Point/Segment.
-
#10904
Invalid calculation of most significant Dimension of a segment
in relate_cartesian_segments strategy
-
#10912
Invalid result of within() and relate() for Areal/Areal
-
#10951
Tests failing on windows with intel compiler due to lack of
/bigobj flag.
-
#10957
Assertion failure and invalid results of various relational
operations.
-
#10958
Invalid results of disjoint() L/L and L/A.
-
#10959
Assertion failure in get_turns() used with no_rescale_policy.
-
#10960
Invalid result of get_turns() for L/A, missing turn.
-
#10961
Invalid result of get_turns() for L/A, invalid turn for a Linear
spike.
-
#11112
Compilation failure on Solaris due to a CS name clash (used
for a macro on this platform)
-
#11121
Invalid result of difference() for integral coordinates
-
Bugfixes:
-
Bug in multipoint/polygon multipoint/multipolygon distance
computation (wrong detection of points inside the areal geometry)
-
Bug in flatten_iterator's assignment operator causing an access
violation
-
Bug in Cartesian segment-segment intersection strategy when
one segment degenerates to a point and is collinear to the
other non-degenerate segment
-
Bug in centroid(), non-deterministic result if calculated for
e.g. a Polygon with zero-area.
-
Bug in buffers for joins with a limited number of points
-
Bug in buffers for round joins with limited number of points
around sharp corners
-
Bug in buffers for joins with large buffer distances
-
Bug in buffers for round ends with an odd number of points
-
Bug in buffers for flat ends with large buffer distances
-
Bug in buffers for interior rings with large negative buffer
distances
-
Bug in closing_iterator not working properly when the input
range is empty
-
Bug in is_simple, not handling properly closed simple linestrings
within multilinestrings
-
Bug in rtree constructors taking a pair of Iterators or a Range
(packing algorithm), the use of reference to destroyed temporary
when Iterator's reference is not true reference, e.g. for some
of the Range Adaptors. It also affects distance() and comparable_distance().
This bug may cause unexpected behavior of the rtree or distance()
algorithm, e.g. an assertion failure or a SEGFAULT.
-
Bug in rtree count() member function, the use of reference
to destroyed temporary when object of type convertible but
not the same as value_type or indexable_type is passed. If
this happens, wrong result may be returned, in most cases 0.
-
Bugs related to the handling of Ranges, preventing compilation
of Geometries using non-Container Ranges in some algorithms
(thanks to Samuel Debionne)
-
Hash:
-
Interprocess:
-
Reduced some compile-time dependencies. Updated to Boost.Container
changes.
-
Fixed bugs:
-
Intrusive:
-
Reduced compile-time dependencies, headers, and the use of Boost.Preprocessor,
specially for hooks and iterators.
-
Fixed bugs:
-
Lexical Cast:
-
Log:
-
Bug fixes:
-
Fixed thread id formatting.
-
Fixed process id formatting. (#10926)
-
Fixed build failure on GNU Hurd.
-
Fixed incorrect behavior of text file sink backend in case
if free space on the file system gets exhausted. The sink will
no longer create lots of empty files in attempt to recover.
(#11016)
-
Fixed incorrect behavior of
attribute_set::insert() in some cases. The inserted
elements could have made some previously inserted elements
not findable. (#11106)
-
Fixed incorrect behavior of
attribute_value_set::size() if a large number of attribute
values are inserted into the set. (#11148)
-
See changelog
for more details.
-
Math:
-
Added two new special functions - trigamma and polygamma.
-
Large update to the Elliptic integral code to use Carlson's latest
algorithms - these should be more stable, more accurate and slightly
faster than before. Also added support for Carlson's RG integral.
-
Added ellint_d, jacobi_zeta and heuman_lambda elliptic integrals.
-
Fixed namespace scope constants so they are constexpr on conforming
compilers, see #10901.
-
Fixed various cases of spurious under/overflow in the incomplete
beta and gamma functions, plus the elliptic integrals, with thanks
to Rocco Romeo.
-
Fix 3-arg legendre_p and legendre_q functions to not call the policy
based overload if the final argument is not actually a policy.
-
Cleaned up some dead code in the incomplete beta function, see #10985.
-
Fixed extreme-value pdf for large valued inputs, see #10938.
-
Switched documentation to use SVG rather than PNG graphs and equations
- browsers seem to have finally caught up!
-
Move:
-
Added
BOOST_MOVE_BASE
utility.
-
Added
adl_move_swap
utility.
-
Reduced dependencies on other Boost libraries to make the library
a bit more lightweight.
-
Fixed bugs:
-
Multi-index Containers:
-
Multiprecision:
-
Changed
frexp to
always be non-expression template generating, see: 10993.
-
Improved support of cpp_dec_float on Cygwin and other platforms with
missing long double support, see 10924.
-
Improved noexcept support and added some more tests, see 10990.
-
Various workarounds applied for Intel-15.0 and Solaris-12.4 compilers.
-
Optional:
-
Improved documentation; documented IO operations and header files.
-
Fixed Bugs:
-
boost::none_t is no longer convertible
from literal 0. This avoids a bug where optional<rational<int>> oi
= 0; would initialize an optional
object with no contained value.
-
Added a way to manually disable move semantics: just define
macro
BOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCES.
This can be used to work around #10399.
-
#10825
Improved the trick that prevents streaming out
optional without header
optional_io.hpp
by using safe-bool idiom.
-
#11087
It is no longer possible to assign
optional<U> to optional<T> when U
is not assignable or convertible to T.
-
#10839
Value accessors now work correctly on rvalues of
optional<T&>.
-
Phoenix:
-
Version 3.2.0
-
New Features:
-
Phoenix now has a lazy list implementation
as an optional extension.
-
New Example:
-
A new example bind_goose shows the compatibility
between boost bind and boost
phoenix bind.
-
Fixed Bugs:
-
#10927
Missing
std:: qualifier for fabs in phoenix/test/stdlib/cmath.cpp
-
#11085
Missing qualifier for pow call in
phoenix/test/function/function_tests.cpp
-
Fixes for a number of cases failing with bind,
lambda and let.
-
Predef:
-
Version 1.2
-
Added Visual Studio 2015 detection.
-
Added detection of Haiku OS.
-
Fix Android endian detection.
-
Added
predef_check
program and BBv2 integration for build configuration checks.
-
Random:
-
Added non_central_chi_squared_distribution.
-
Thread:
-
Version 4.5.0
-
New Experimental Features:
-
#9600
Async: Add task_region
-
#10611
Add emplace promise::set_value and emplace make_ready_future
-
#10826
Add scheduled executor operations
-
#11048
Add a serial_executor based on continuations
-
Fixed Bugs:
-
#6787
boost::thread::sleep() hangs if system time is rolled back
-
#10734
Submit method work differently on different executors, some
throw exception and some silently ignore error (thread_executor
and inline_executor)
-
#10736
Task exceptions silently ignored. I think std::terminate solution
from N3785 and std::thread is better choice and more consistent.
-
#10737
In serial_executor we have infinite wait if task throw exception.
-
#10822
Boost.Thread fails to compile on Android
-
#10824
Boost.Thread 1.57 breaks Windows XP compatibility for SP2 and
below.
-
#10963
future<future<T>>::then Has No Implementation
-
#10964
future<future<T>>::unwrap().then() Deadlocks
-
#10968
The futures returned by async() and future::then() are not
blocking.
-
#10971
shared_future::get()/get_or() must be const
-
#10972
shared_future::then() can be called multiple times.
-
#10979
Support T& type deduction when the make_ready_future parameter
is reference_wrapper<T>
-
#10996
Thread physical_concurrency() is failing on Windows
-
#11035
BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE not defined for Android
-
#11053
The attached code results in a R6025 - pure virtual function
call in run_thread_exit_callbacks
-
TypeErasure:
-
Fixed compilation with MSVC 12.
-
TypeIndex:
-
Link time assertions added on platforms that support it
-
Units:
-
Fix for base units with arbitrary dimensions.
-
Unordered:
-
Fix move assignment with stateful, propagate_on_container_move_assign
allocators (#10777).
-
Fix potential overflow when calculating number of buckets to allocate
(GitHub
#4).
-
Other minor changes, see changelog.
-
Variant:
Compilers Tested
Boost's primary test compilers are:
-
Linux:
-
Clang: 3.4
-
Clang, C++14: 3.5, 3.6
-
GCC: 4.4.7, 4.9.2
-
GCC, C++98: 4.8.1, 4.8.2
-
GCC, C++11: 4.4.7, 4.8.4, 4.9.2
-
GCC, C++14: 4.9.2
-
Windows:
-
GCC, mingw: 4.4.7, 4.5.4, 4.6.3, 4.7.3, 4.8.2
-
Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0
-
FreeBSD:
-
QNX:
Boost's additional test compilers include:
-
Linux:
-
Clang: 3.0, 3.1, 3.2, 3.3, 3.4
-
Clang, C++14: 3.5, 3.6
-
GCC: 4.4.7, 4.6.4, 4.7.3, 4.8.1, 4.9.2, 5.0.0 (experimental)
-
GCC, C++11: 4.4.7, 4.8.4, 4.9.2
-
GCC, C++14: 4.9.2
-
Windows:
-
GCC, mingw: 4.4.7, 4.5.4, 4.6.4, 4.7.3
-
Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
-
Android
-
Clang: 3.4, 3.5
-
GCC: 4.8, 4.9
-
FreeBSD:
-
QNX:
Acknowledgements
Beman Dawes, Eric Niebler,
Rene Rivera, Daniel James,
Vladimir Prus and Marshall Clow managed this release.