Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Version 1.58.0

Version 1.58.0

April 17th, 2015 07:53 GMT



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


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:
  • 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:
    • Fixed strict aliasing violation (GitHub #3).
  • Interprocess:
  • 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:
  • Multi-index Containers:
    • The efficiency of lookup operations has improved in situations where they involve the generation of temporary values of key_type. Consider for instance the following code:
      typedef multi_index_container<
          ordered_unique<identity<std::string> >
      > multi_t;
      multi_t m=...;
      m.find("boost"); // passed a const char*, not a std::string    
      In previous versions of the library, the find operation generates several temporary std::strings (one every time an internal comparison is made). In sufficiently advanced compilers, this is now avoided so that only one temporary is created.
    • Maintenance fixes.
  • 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:
    • Breaking change: Compile time checked getter is now used by default in boost::get<U>(VariantT) and boost::polymorphic_get<U>(VariantT). New getter asserts that type U is one of the types that can be stored in VariantT. Define BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT to change default behavior. See get.hpp and polymorphic_get.hpp descriptions for more info #547.
    • Added missing comparison operators to variant #8620, #10811
    • Multiple documentations fixes #10273, #10653
    • Variadic templats enabled on Clang #10832
    • Autodetection of return types for visitors in C++14, which makes it possible to use boost::apply_visitor with generic lambdas #10837:
      auto str = boost::apply_visitor(
          [](auto v) {
              return boost::lexical_cast<std::string>(v);
    • Improved swap functions #10882
    • Many improvements to variadic templates, even more methods support variadics.
    • Multiple bugfixes and testing improvements including Coveralls integration

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:
    • GCC: 4.2.1
  • QNX:
    • QCC: 4.4.2

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:
    • GCC: 4.2.1
  • QNX:
    • QCC: 4.4.2


Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus and Marshall Clow managed this release.