What's new in 1.59.0

  • New libraries

    Two new libraries added: Convert for type conversion and Coroutine2 for C++14 coroutines.

  • Performance improvements

    Significant buffer performance boost for multi‑point geometries and faster event synchronization in logging.

  • Dependencies

    Added 12 dependencies across 6 libraries and removed 3 dependencies across 3 libraries; type_index replaces old type wrappers.

  • Security & reliability

    Numerous bug fixes resolve regressions, improve stability, and correct compilation errors across the ecosystem.

  • Developer experience

    constexpr support restored, new Unicode JSON parser added, and improved documentation enhance developer productivity.

Release notes version 1.59.0

Version 1.59.0

August 13th, 2015 15:23 GMT

Documentation

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

  • Container:
  • 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)
  • Interprocess:
  • 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

Acknowledgements

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

All Contributors


Join the Boost Developers Mailing List

Get the latest on releases, features, security patches, fixes and all major announcements.
Want to fix bugs, review code, maintain libraries, and propose new features?
Read our contributors guide and join the Boost community.

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.

Decorative illustration