What's new in 1.63.0

  • Performance improvements

    buffered_channel and unbuffered_channel replace deprecated channels, delivering faster fiber communication; BOOST_MOVE_FORCEINLINE accelerates move operations.

  • Dependencies

    Added five new dependencies across four libraries and removed one, simplifying build requirements.

  • Security & reliability

    Fixed atomic 64‑bit operation bug on 32‑bit x86, plus numerous compiler and runtime crash fixes.

  • Developer experience

    optional gains in‑place constructors and sfinae‑friendly overloads; many modules now accept C++11 variadic templates.

Release notes version 1.63.0

Version 1.63.0

December 26th, 2016 23:43 GMT

Documentation

Third Party Downloads

Post-release Patches

  • Atomic:
    • Using 64-bit atomic operations on 32-bit x86 with gcc versions older than 4.7 and compatible compilers can result in generation of incorrect code. This problem is fixed in this commit.

Updated Libraries

  • Atomic:
    • Added the static constant atomic<T>::is_always_lock_free for conformance with C++17. The constant indicates that the given specialization always provides lock-free implementation of atomic operations.
    • Improved support of Oracle Studio on x86 targets.
  • Container:
  • Context:
    • #11687 Xcode (Apple clang) and thread_local
    • #12114 context does not preserve fpu context on ios arm64 devices (fixed for other architecturs too)
    • #12411 fpu registers not preserved with O2 optimizations in Visual Studio (fixed for other architecturs too)
    • #12551 building boost on arm64 causes error: unknown directive
    • reduced signatur for ontop-functions
    • unit-test for private fcontext-API
    • performance-test for ucontext and fcontext fixed
  • Fiber:
    • unbounded_channel and bounded_channel marked as deprecated
    • new classes buffered_channel and unbuffered_channel
    • performance improved
  • Fusion:
    • Fixed fusion::vector buggy constructors (Thanks to Lee Clagett).
    • BOOST_FUSION_ADAPT* and BOOST_FUSION_DEFINE* now allow empty structures. (#6592)
    • BOOST_FUSION_DEFINE* allows move constructor and assignment. (#10099)
    • Adaptor for std::array (Thanks to Mateusz Łoskot). (#8241)
    • Fixed returning temporary variable warnings on MSVC.
  • Geometry:
    • Improvements:
      • Intersection: take care that output is valid (work in progres, not yet finished - but more is valid)
    • Solved tickets:
      • #12289 Avoid warning/compilation error for std::cout
      • #12412 Invalid result of covered_by() with geographic Points and Boxes
      • #12413 rtree::remove() not working properly with geographic Points
  • Hash:
    • Fixed some warnings.
  • Interprocess:
  • Intrusive:
  • Lexical Cast:
    • Fixed issue found by -fsanitize=undefined #21
  • Log:
    • General changes:
      • Removed the previously deprecated type_info_wrapper.
    • New features:
      • Added a way to access the current file name from the text file sink backend. The file name can be obtained with the get_current_file_name method.
    • Bug fixes:
      • Fixed compilation errors for Android API prior to version 21.
      • Streaming operators now take scalar types and enums by value. This allows to output static constants and bitfields directly into formatting stream and record stream. (#11998)
      • Fixed auto-detection of native syslog API. (#12600)
      • In UDP socket based syslog backend implementation, changed the syslog message format for better compliance with RFC3164.
      • File close handler installed in text file sink backend is no longer called if the file is not open yet.
    • See changelog for more details.
  • Metaparse:
    • Improved the implementation of BOOST_METAPARSE_STRING
      • The maximal string length limit has been increased to 2048
      • The maximal string length limit can be extended beyond 2048 by regenerating some of the Boost headers using a script (part of the library)
      • The string length limit can be changed within a compilation unit
  • Move:
    • Improved experimental adaptive sort algorithm performance
    • Activate BOOST_MOVE_FORCEINLINE
  • Optional:
    • Added two new in-place constructors. They work similarly to emplace() functions: they initialize the contained value by perfect-forwarding the obtained arguments. One constructor always initializes the contained value, the other based on a boolean condition.
    • Syntax o = {} now correctly un-initializes an optional, just like in std::optional.
    • Fixed optional<optional<T>&> initialization. (#12203)
    • Optional constructors are sfinae-friendly. This fixes interaction with std::tuple. (#12563)
  • Phoenix:
    • Most of modules now support C++11 variadic templates.
    • Fixed type deduction failure with result type.
    • Suppress unused warnings.
    • Fixed too few arguments error on binary math functions.
    • Added workarounds for older compiler.
  • Python:
    • Added (basic) support for C++11 (std::shared_ptr, std::unique_ptr)
    • Incorporated an extension API to wrap NumPy
    • Removed obsolete bits and pieces
  • Test:
    • Boost.test v3.4 see the Change log section for more details.
    • New feature: per_element and lexicographic modifiers of BOOST_TEST can also be applied to string comparison
    • Breaking change: colons that appear in test case names are replaced with underscores
    • Bug fixes
  • TypeIndex:
    • Added runtime_cast to the library as an emulation of dynamic_cast. Thanks to Chris Glover for the implementation. See runtime_cast reference for more info.
    • Internals of the CTTI were made more platform independant, due to change of the std::size_t type to unsigned int.
  • Units:
    • Fix inspection warnings
    • updated physico-chemical constants to CODATA 2014 values
    • define biot correctly as 10 Ampere
  • Unordered:
    • Fix an exception safety issue in assignment.
    • Use std::allocator_traits where available, and support modern style rebind (#12459).
    • Add some allocator aware constructors.
    • Use the hint iterator in emplace_hint.
    • Fixed some warnings.
    • See the changelog for more details.

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang: 3.0, 3.8.1
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8.1
    • Clang, C++1z: 3.8.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.2.0, 6.2.0
    • GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1, 6.2.0
    • GCC, C++14: 5.2.0, 5.3.0, 6.1.1, 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
  • 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
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8.1
    • Clang, C++1z: 3.8.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.2.0, 6.1.1, 6.2.0
    • GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1, 6.2.0
    • GCC, C++14: 5.2.0, 5.3.0, 6.1.1, 6.2.0, 7.0.0 (experimental)
    • GCC, C++1z: 6.1.1
    • 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
    • GCC,C++14: 6.1.0
  • 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