What's new in 1.64.0

  • New libraries

    Added the Process library for cross‑platform child process creation, stream handling, and termination.

  • Performance improvements

    Optimized allocate_shared and make_shared for arrays and accelerated 128‑bit scans in multiprecision.

  • Dependencies

    Added 7 dependencies across 6 libraries and removed 3 dependencies across 3 libraries.

  • Security & reliability

    Fixed numerous bugs including atomic generation issues, container crashes, and memory leaks, enhancing overall stability.

  • Developer experience

    Introduced constexpr addressof, new BOOST_TEST_ALL_EQ/BOOST_TEST_ALL_WITH macros, and traits make_void/void_t.

Release notes version 1.64.0

Version 1.64.0

April 19th, 2017 17:42 GMT

Documentation

Third Party Downloads

New Libraries

  • Process:
    • library by Klemens D. Morgenstern, that provides cross platorm ways to allows you to: create child processes setup streams for child processes communicate with child processes through streams (synchronously or asynchronously) wait for processes to exit (synchronously or asynchronously) terminate processes Broken feature: GitHub #67: "group.wait() does not return".

Updated Libraries

  • Any:
    • Suppressed false warnings about returning reference to temporary
    • boost::addressof is now used instead of directly taking the address #12615
    • Headers are not included using double quotes any more #12053
    • CI tests now run with address, leak, and undefined sanitizers
    • Added more test
  • Atomic:
    • Fixed possible incorrect code generation in 64-bit atomic operations on 32-bit x86 with gcc versions older than 4.7 and compatible compilers.
  • Config:
    • Added BOOST_NO_CXX11_SFINAE_EXPR defect detection.
  • Container:
  • Context:
    • new API: call/cc
    • deprecated API:execution-context
    • stack manipulation on MIPS fixed
    • #12719 segmentation fault when built with mingw-w64
    • #12948 Unexpected snprintf result is on Android ARM
    • #38: context_entry() crashes on macOS
    • #39: Unknown directive .cpu on aarch64 with Clang 3.8 on Android
    • #41: std::bind() fails with invoke()
    • #46: "rename of continuation member functions" missed a spot
    • #50: bad assembly for fcontext on ppc64/sysv/elf
  • Conversion:
    • Docs were ported to Quickbook (thanks to Mikhail Maksimov for the port)
    • Fixed a memory leak in test (thanks to Mikhail Maksimov for the fix)
    • CI tests now run with address, leak, and undefined sanitizers
  • Core:
    • Implemented constexpr addressof on compilers that support C++11 constexpr and SFINAE expressions (Glen Fernandes). BOOST_CORE_NO_CONSTEXPR_ADDRESSOF macro indicates when constexpr addressof is not available.
    • In lightweight_test.hpp, added new macros BOOST_TEST_ALL_EQ and BOOST_TEST_ALL_WITH for testing container contents (Bjorn Reese).
  • Coroutine2:
    • #4: coroutine2<> does not accept std::bind
  • DLL:
    • Fixed WinCE compilation
    • Added boost:dll::symbol_location_ptr function for getting location of a symbol by pointer that could not be dereferenced (void pointer for example)
    • Fixed UB in detail::aggressive_ptr_cast for member pointers
    • Fixed leaks in experimental smart imports
    • Fixed warnings
    • CI tests now run with address and leak sanitizers
  • Fiber:
    • (un)bounded_channel<> removed
    • #100: ASIO: unbuffered_channel / scheduler notify issue
    • #105: skynet variants crash on windows
    • #106: Passing a fixed_stack allocator to async/packaged_task doesn't compile
    • #110: Compile error on ARMv6
    • #111: endless-loop in buffered_channel::try_value_pop()
    • #114: buffered_channel::try_push does not wake fibers in pop`
  • Geometry:
    • Improvements:
      • matrix transformation is now based on Boost.QVM instead of Boost.Ublas
    • Breaking changes:
      • ublas_transformer is renamed to matrix_transformer
      • explicit modifier is added to constructors of rtree index::dynamic_* parameters
      • strategy::area::huiller replaced by strategy::area::spherical
    • Solved issues:
      • 363 Missing includes in geometry/index/parameters.hpp
      • 364 within(Linear, Areal) compilation error when arguments use different point types
      • 370 Buffer Seg Faults with Ring as Input
    • Solved tickets:
      • 11899 boost::geometry::equals doesn't handle open polygons
      • 11930 Inaccuracy of area::huiller strategy
      • 11931 Wrong spherical area with pole encircling polygons
      • 12410 Lack of support of geographic coordinate system in correct()
      • 12566 Ambiguous template instantiation in equal_to<> when pair value contains raw pointer
      • 12861 Segmentation fault in stdlibc++ (gcc 4.8.2) affecting rtree
      • 12885 Use BOOST_THROW_EXCEPTION instead of throw
    • Bugfixes:
      • Fix distance_measure in get_turn_info
  • Hash:
    • Stop using std::unary_function and std::binary_function when they're not available.
  • Interprocess:
  • Intrusive:
  • LexicalCast:
    • Fixed multiple warnings #11842
    • CI tests now run with address, leak, and undefined sanitizers
  • Math:
    • Big push to ensure all functions in also in C99 are compatible with Annex F.
    • Improved accuracy of the Bessel functions I0, I1, K0 and K1, see 12066.
  • Multi-index Containers:
    • Fixed a bug related to ambiguous references in the presence of more than one ranked index (ticket #12955).
    • Maintenance fixes.
  • Multiprecision:
    • In cpp_bin_float prevent double rounding when converting to a denormalized float. See #12527.
    • Fix bug in integer sqrt for very small integers. See #12559.
    • Fix conversion to signed-zero in cpp_bin_float.
    • Change cpp_bin_float rounding code to round at arbitrary location so we can use it for conversions, see #12527.
    • Improve performance of 128-bit bit-scan operations.
    • Fix subtraction of very small quantities in cpp_bin_float. See: #12580.
    • Bring error handling into line with C99 Annex F. See #12581.
    • Fix bitwise export of trivial cpp_int's, see #12627.
    • Fix ilogb (and code that uses it) to consistently return the smallest value of the exponent type when the argument is zero, see #12625.
    • Allow conversion from __float128 to cpp_bin_float.
    • Fix bug in left shift of cpp_int which would result in bit-loss, see #12790.
    • Fixed bugs in bounded but variable precision cpp_int's caused by over-aggressive constexpr optimization, see #12798.
  • Predef:
    • Fix Intel C/C++ compiler version specification.
    • Add BOOST_VERSION_NUMBER_MAJOR, BOOST_VERSION_NUMBER_MINOR, BOOST_VERSION_NUMBER_PATCH macros to extract components from valid version numbers.
    • Change VS version numbering. Versions after VS2015 will use the compiler version instead of the varied product versions.
  • Regex:
    • Compiling with Oracle C++ toolset is no longer restricted to static linking.
    • Big effort to de-fuzz the library using libFuzzer and fix identified issues, see: #12818.
  • Smart Pointers:
    • Rewrite of allocate_shared and make_shared for arrays for a more optimal and more maintainable implementation (Glen Fernandes)
    • Pointer cast functions with move semantics (Chris Glover)
  • Test:
    • Boost.test v3.5 see the Change log section for more details.
    • New feature:
      • Now Boost.Test provides customization points for logging user defined types
      • JUnit output format can now have a log-level
      • JUnit output format has not better performances when the test modules have a lot of checks
    • Bug fixes
  • TypeIndex:
    • Added BOOST_TYPE_INDEX_IMPLEMENT_RUNTIME_CAST, which implements the functionality for runtime_cast but does not include the BOOST_TYPE_INDEX_REGISTER_CLASS macro (thanks to Chris Glover for imlpementing it)
    • Fixed undefined macro warning in stl_type_index.hpp #12739
    • CI tests now run with address, leak, and undefined sanitizers
  • TypeTraits:
    • Added new traits make_void and void_t.
  • Unordered:
    • Initial support for new C++17 member functions: insert_or_assign and try_emplace in unordered_map, merge and extract in all containers.
  • Variant:
    • Fixed construction of variant from recursive_variant_ (thanks to Mikhail Maksimov for the fix) #12508, #12645
    • Do not enable variadic templates for MSVC2015Update1 as it still has issues #12236
    • Workaround GCC6 crash (thanks to Mikhail Maksimov for the workaround) #12680, #7120
    • Made boost::polymorphic_*get to work as boost::*get in undocumented border cases and fixed tests #11950
    • CI tests now run with address, leak, and undefined sanitizers

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang: 3.0, 3.8.1, 3.9.1
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1, 3.9.1
    • Clang, C++14: 3.5, 3.6, 3.7.1, 3.8.1, 3.9.1
    • Clang, C++1z: 3.9.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 6.2.0
    • GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.2.0
    • GCC, C++14: 5.4.1, 6.2.0, 6.3.0
    • GCC, C++1z: 6.2.0
    • Intel: 16.0, 17.0
    • Intel, C++11: 16.0, 17.0
    • Intel, C++14: 16.0, 17.0
  • OS X:
    • Apple Clang: 7.0.2
    • Apple Clang, C++11: 7.0.2
  • Windows:
    • GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0
    • GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
    • GCC, C++14, mingw: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android:
    • Clang: 3.6, 3.7, 3.8
    • GCC: 4.9, 5.4, 6.2
  • FreeBSD:
    • Clang: 3.8
    • Clang, C++11: 3.8
    • Clang, C++14: 3.8
    • Clang, C++1z: 3.8
  • QNX:
    • QCC: 4.4.2
  • SunOS:
    • Oracle Solaris Studio: 12.5
    • Oracle Solaris Studio, C++11: 12.5

Boost's additional test compilers include:

  • Linux:
    • Clang: 3.0, 3.8.1, 3.9.1
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.8.1, 3.9.1
    • Clang, C++14: 3.4, 3.5, 3.6, 3.7. 3.8, 3.8.1, 3.9.1
    • Clang, C++1z: 3.9.1, 4.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 6.2.0
    • GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.2.0
    • GCC, C++14: 5.4.1, 6.2.0, 6.3.0, 7.0.1
    • GCC, C++1z: 6.2.0
    • Intel: 16.0, 17.0
    • Intel, C++11: 16.0, 17.0
    • Intel, C++14: 16.0, 17.0
  • OS X:
    • Apple Clang: 7.0.2
  • Windows:
    • GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • Android:
    • Clang: 3.6, 3.7, 3.8
    • GCC: 4.9, 5.4, 6.2
  • FreeBSD:
    • Clang, C++98: 3.8
    • Clang, C++11: 3.8
    • Clang, C++14: 3.8
    • Clang, C++1z: 3.8
  • QNX:
    • QCC: 4.4.2
  • SunOS:
    • Oracle Solaris Studio: 12.5
    • Oracle Solaris Studio, C++11: 12.5

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