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.59.0

Version 1.59.0

August 13th, 2015 15:23 GMT



Known Issue

  • Boost.Log contains has a regression that prevents some of the logging statements from compiling (#11549). This is fixed in git.

New Libraries

  • Convert: An extendible and configurable type-conversion framework, from Vladimir Batov.
  • Coroutine2: (C++14) Coroutine library, from Oliver Kowalke.

Updated Libraries

  • Context:
    • #11223 check support for std::integer_sequence
    • execution_context uses internally Windows Fibers with BOOST_USE_WINFIBERS
    • support of assember for MinGW on Windows (32bit)
  • Coroutine:
    • #10978 remove additional semicolons
    • #11230 coroutine_error returns dangling exception message pointer
    • #11234 doesn't compile when used with boost::range::algorithms
    • #11356 coroutines segfaults with BOOST_USE_SEGMENTED_STACKS
  • Fusion:
    • Add a new concept, Unbounded Sequence for sequence and Unbounded Iterator for iterator. Currently, Unbounded Sequence affects the behaviour of fusion::(value_)at(_c) and fusion::(value_)at_key. Unbounded Iterator has no effect (reserved for future release). For more details, see Unbounded Sequence and Unbounded Iterator. (pull-request 85)
    • Support C++11 variadic templates for fusion::list. (pull-request 84)
    • Fixed bugs:
      • Fix missing include <utility>. (#11161)
      • Revert some constexpr support, regression in 1.58.0. (#11211, #11267)
      • Fix compile error with fold due to missing include. (#11249)
      • Fix compile error with adapting an empty struct, regression in 1.58.0. (#11269)
      • Remove use of obsolete (and incorrect) workaround for sequence comparison, it affects MSVC-8 and earlier. (pull-request 78)
      • Fix compile error while copying a sequece which derived from fusion::list, regression in 1.58.0. (pull-request 87)
      • Fix compile error on copying a fusion::tuple. (#11140)
      • Add workarounds for GCC 4.6 with constexpr. (#11517)
  • Geometry:
    • Additional functionality:
      • Added rtree const_iterator, begin(), end() and the support for Boost.Range.
      • The support for C++11 std::initializer_list in geometries models.
      • Disjoint and intersects support the following geometry combinations: multipoint/linestring, multipoint/multilinestring.
      • Added relate() and relation() algorithms.
      • Intersection has been implemented for combinations of pointlike and linear geometries
      • Added implementation for difference(pointlike, linear)
      • New algorithm is_empty, returning true if the geometry represents the empty set
      • The envelope algorithm supports pointlike and linear geometries in the spherical equatorial coordinate system
      • The envelope algorithm supports pointlike geometries in the geographic coordinate system
    • Improvements:
      • Upgraded rtree const_query_iterator category to ForwardIterator.
      • Buffer performance of buffers around multi-points is improved significantly
    • Breaking changes:
      • buffer side strategy now returns error_code instead of bool. If you have your own custom side strategy, it should be adapted
    • Solved tickets:
      • #11113 Support easy enumeration of all elements with BOOST_FOREACH
      • #11232 Feature request - relate()
      • #11236 Invalid result of centroid() for integer coordinate type
      • #11268 Regression in boost::geometry::intersection interface with multi_linestring and box -- does not compile on 1.57 VS 1.55
      • #11332 Assertion failure in buffer for extreme coordinate differences
      • #11346 Segment iterator does not work with ranges returning values instead of references
      • #11436 sym_difference(py1, py2, mpy) returns invalid multipolygon
    • Bugfixes:
      • Buffer: use a more robust way to calculate the side of an intersection, this fixes several errors in buffer generation
      • Fix in selection of segment to which calculate from IP from, in intersection of two segments. Now is selected the one close to a segment-point point, or else the one on the shortest segment. This avoids (rarely occuring) generation of tiny triangles making output polygons invalid
      • In rescaling round instead of truncate to the integer grid (this fix and the previous mentioned can have some impact on output geometries)
      • Fix potential infinite loop in detail::has_spikes (the loop can happen if the points passed have NaN coordinates)
  • Intrusive:
    • Implemented map and multimap-like interfaces.
    • Refactored hashtable containers to reduce template instantiations.
  • Lexical Cast:
    • Fixed warnings
    • Simplified metaprogramming (thanks to Edward Diener)
  • Log:
    • General changes:
      • On systems with symbol visibility support (e.g. Linux) the library is now built with all internal symbols hidden.
      • Breaking change: The library has been ported to Boost.TypeIndex for its underlying type info management tool. This affected the following public interfaces:
        • invalid_type exceptions thrown by the library now have typeindex::type_index attached as the description of the offending type. The type was previously identified by type_info_wrapper.
        • Boost.Exception type_info_info error information now contains typeindex::type_index instead of type_info_wrapper.
        • attribute_value::get_type() now returns typeindex::type_index instead of type_info_wrapper. User-defined attribute value implementations should be similarly changed (the attribute_value::impl::get_type() virtual method now also returns typeindex::type_index).
      • type_info_wrapper component has been deprecated and will be removed in future releases. Boost.TypeIndex is recommended as a replacement.
      • Removed the previously deprecated headers: boost/log/utility/intrusive_ref_counter.hpp, boost/log/utility/explicit_operator_bool.hpp, boost/log/utility/empty_deleter.hpp.
      • Added support for building the library for OpenBSD. (#11446)
      • Improved internal implementation of the event synchronization primitive used for asynchronous logging. (#11398)
    • Bug fixes:
      • Fixed incorrect behavior of attribute_value_set::insert() and attribute_value_set constructor in some cases. (#11190)
    • See changelog for more details.
  • Move:
  • Multi-index Containers:
  • Predef:
    • Fix many problems with predef_check functionality.
    • Update SunPro detection to accomodate latest version of compiler from Oracle.
    • Add and and or logical operators for predef_check expression on the Boost Build side.
    • Fix BOOST_ARCH_PARISC to correctly spelled name.
    • Fix MAKE_YYYYM macros to correctly limit the month.
  • Program Options:
    • Fix compilation errors, missing dllexport and warnings with MSVC and MinGW (Daniela Engert, Marcel Raad).
    • Fix unintialized fields (Zoey Greer).
    • Stop options with implicit value from consuming separate tokens (Michael John Decker).
    • Make multitoken limit be max int, not 32K (Hans Hohenfeld).
    • Code formatting and documentation fixes (Jurko Gospodnetić, Lauri Nurmi).
    • Minimal support for no-rtti build (Minmin Gong)
    • Don't increment environment pointer past the end (Vladimir Prus)
  • Property Tree:
    • A new JSON parser with full Unicode support.
    • Breaking change: The new parser does not support comments or string concatenation in JSON files. These features were non-standard extensions of the old parser but their removal could break code which was relying on them.
  • Boost.Test v3:
  • TypeIndex:
    • Removed dependencies on some of the Boost libraries to improve compilation times and modularity
    • Warnings fixed in tests and other maintainance improvements were done.
  • Variant:
    • Fixed missing include in element_index.hpp #11196, #11283
    • Fixed boost::apply_visitor usage with C++14 and const references #11251, #11285
    • Relaxed compile time checks for all the get<reference>(variant_variable) functions (thanks to Nicolas Cornu)

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang: 3.4
    • Clang, C++14: 3.6
    • GCC: 4.4.7, 4.8.2, 4.9.3
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3
    • Intel: 15.0
  • Windows:
    • Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android:
    • Clang: 3.6
    • GCC: 4.8, 4.9
  • SunOS:
    • Sun: 6.0
  • 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.6, 3.7
    • GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 5.1.0, 6.0.0
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3, 5.1.1
    • Intel: 15.0
  • Android:
    • Clang: 3.6
    • GCC: 4.8, 4.9
  • FreeBSD:
    • Clang: 3.4.1
    • GCC: 4.8.5, 5.1.0, 6.0.0


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