What's new in 1.68.0

  • New libraries

    One new library, YAP, provides C++14 expression templates for generic metaprogramming.

  • Performance improvements

    Math now speeds up polynomial addition and improves erfc rational approximation accuracy.

  • Dependencies

    Added 17 dependencies across 10 libraries and removed 4 across 4 libraries, reflecting broader ecosystem integration.

  • Security & reliability

    Numerous bug fixes eliminate undefined behavior in cpp_int, cpp_bin_float, and optional methods, enhancing stability.

  • Developer experience

    Added constexpr to error_code members, new has_value(), map(), and flat_map() in optional, and an all‑in‑one GIL header.

Release notes version 1.68.0

Version 1.68.0

August 9th, 2018 03:46 GMT

Documentation

Notes for Windows users

Boost.WinAPI has been updated to target Windows 7 by default, where possible. In previous releases Windows Vista was the default.

Boost.WinAPI is used internally as the Windows SDK abstraction layer in a number of Boost libraries, including Boost.Beast, Boost.Chrono, Boost.DateTime, Boost.Dll, Boost.Log, Boost.Process, Boost.Stacktrace, Boost.System, Boost.Thread and Boost.UUID. To select the target Windows version define BOOST_USE_WINAPI_VERSION to the numeric version similar to _WIN32_WINNT while compiling Boost and user's code. For example:

    b2 release define=BOOST_USE_WINAPI_VERSION=0x0501 stage

The list of Windows API version numbers can be seen on this page.

New Libraries

  • YAP:
    • An expression template library for C++14 and later, from Zach Laine.

Updated Libraries

  • Beast:
    • This version fixes a missing executor work guard in all composed operations used in the implementation. Users who are experiencing crashes related to asynchronous completion handlers are encouraged to upgrade.
    • For a complete list of changes, please view the official Release Notes.
  • Context:
    • #78: Linker error with context-impl=ucontext: multiple definition of boost::context::detail::current_rec
  • Coroutine2:
    • #14: crash while stack unwinding
    • #18: some guidance on why to use coroutine2
    • #20: failes to compile test in due to the error C2039
    • #22: undefined behaviour documentation
  • Fiber:
    • #170: buffered_channel::try_push has incorrect documentation
    • #172: WIN64: 'invalid conversion from 'HANDLE' to 'std::thread::native_handle_type' errors for builds using mingw-w64
    • #175: throw exception "Operation not permitted"
    • NUMA support moved to extra library (fiber-numa); enabled via property numa (numa=on)
  • Fusion:
    • Added a workaround for ambiguous call of fusion::deque constructor on GCC 4.4/c++0x (PR#178, commit).
    • Fixed a bug with C-style array (PR#177).
    • Fixed a fusion::for_each signature to take functor by value (#4427).
      • This may break existing code with non-copyable (non-movable) functor, but the implementation wasn't correct for a long time; the documantation was correct from the first. So, please make sure your usage.
    • Fixed unintentional MPL placeholder substitution bug on fusion::transform (#5490).
    • Moved description, how to conform Fusion sequence as MPL sequence, to mpl section (#4029).
    • Added notes regarding IO facility for adapted type (#6091).
  • Geometry:
    • Improvements
      • 469 Horizontal grid shift (nadgrids) in SRS transformations (undocumented for now due to potential interface changes).
      • 478 Box-Segment distance for spherical and geographic coordinate systems.
      • 487 Missing combinations of geometries in distance for spherical and geographic cs
      • 489 Additional direct geodesic problem formulas for internal use
    • Solved issues
      • 470 Assertion failure with short spherical and geographic segments.
      • 471 Invalid envelope of spherical polygon
      • 498 Unexpected results with expand() and make_inverse() for spherical and geographic CS
      • 504 Unused parameter warnings.
    • Bugfixes
      • 488 Handle non-true-references in closing_iterator and ever_circling_range_iterator
      • 495 VxWorks 7 cross-compilation issue.
  • GIL:
    • Added
    • Changed
    • Removed
      • IO v1 extension has been replaced with IO v2.
  • Graph:
    • Conditionally replace deprecated/removed C++98 std::bind1st by std::bind, std::auto_ptr by std::unique_ptr, and std::random_shuffle by std::shuffle. (PR#89)
    • Fix compiler error with release builds on VS2015 (PR#84)
    • Fix the Stanford GraphBase examples (PR#87)
    • Fix friend declarations for iterator_core_access (PR#103)
    • Add missing <boost/iterator.hpp> include (PR#104)
    • Avoid an unused variable warning (PR#90)
    • Fix some typos in documentation (PR#88, PR#98, PR#102)
    • Fix some issues in tests and examples (PR#85, PR#105)
  • Lexical Cast:
    • Fixes for clang-tidy warnings #12092
  • Log:
    • Improved support for VxWorks. (PR#39)
    • Save and restore ebx register on x86 PIE targets in the dump stream manipulator implementation.
  • Math:
    • Support for arbitrary precision complex valued quadrature and hence contour integration
    • Improve performance of polynomial addition
    • Continue to improve numerical integration routines, and in particular add support for contour integrals.
    • Improve accuracy of erfc function's rational approximations.
  • Multi-index Containers:
    • Containers of moveable but non-copyable elements can now be serialized (ticket #13478). Thanks to Sébastien Paris for the report.
    • multi_index_container's default constructor is no longer explicit (ticket #13518).
  • Multiprecision:
    • Support added for complex multiprecision numbers.
    • Changed conversion to unsigned integer types to be truncating to match standard defined behaviour.
    • Correct bug in MPFR string formatting.
    • Fix undefined behaviour in cpp_dec_float conversion from long long.
    • Add support for Eigen interoperability.
    • float128.hpp: Fix Intel on Windows build.
    • Fix type used in temporaries when expanding expression templates containing mixed expressions.
    • Fix infinite loop in gmp_float to fixed-point string conversion.
    • Update the expression templates to issue static_asserts with better error messages when you try and do something unsupported.
    • Fix bug in cpp_int where incrementing to zero doesn't set the sign correctly.
    • Remove erroneous use of std::move, and rely on NVRO instead.
    • Fix up support for changes to MPIR-3.0.
    • Fix various conversion errors in cpp_bin_float when the exponent type is a long long, or else we're converting to an integer that is wider than we are.
    • Fix compatibility issue with GCC-8 caused by the introduction of std::byte.
  • Optional:
    • Added member function has_value() for compatibility with std::optional (issue #52).
    • Added member function map() for transforming optional<T> into optional<U> using a function of type T -> U.
    • Added member function flat_map() for transforming optional<T> into optional<U> using a function of type T -> optonal<U>.
  • Predef:
    • Add support for __ARM_ARCH macro. (from Tim Blechmann)
    • Add detection for PTX architecture. (from Benjamin Worpitz)
    • Add nvcc compiler detection. (from Benjamin Worpitz)
    • Add support for detecting CUDA. (from Benjamin Worpitz)
    • Remove reference to obsolete BOOST_ARCH_AMD64. (from Peter Kolbus)
  • Program Options:
    • Support for multiple long names for an option, thanks to Eyal Rozenberg (PR#53)
  • Python:
    • Bug fixes to correct autolink support (Windows) (#193)
  • Rational:
    • Fixed undefined behavior in normalize() (PR#19).
  • System:
    • Add constexpr to error_code and error_condition members under C++14 and above (PR#23).
  • Signals:
    • Removal Notice: Boost.Signals will be removed in the next release. Boost.Signals was deprecated in version 1.54.0. Transition to Boost.Signals2 now to avoid disruption.
  • Spirit:
    • Spirit.X3:
      • Small list parser optimization (PR#368).
      • Pass container attributes through sequence parser or unary ending down to a sequence parser (PR#370 #12085).
      • More fine grained sequence attribute check message (PR#371).
      • Removed redundant check in skip_over (PR#373).
      • Workaround constexpr in noexcept VS2015 bug in entire x3::variant (PR#379).
      • Fixed calc4b example compilation (PR#384).
      • Minor code improvements (PR#374).
    • Spirit.Qi:
      • Fixed ADT support by permutation and sequence_or operator (PR#376).
      • Specialize iterator_source for random access (PR#383).
      • Removed redundant check in skip_over (PR#373).
    • Spirit.Karma:
      • Fixed UB in get_absolute_value function (PR#246).
      • Fixed use after scope bug if ADT getter returns by value (PR#375 #6126).
    • Spirit.Classic:
  • Stacktrace:
    • Fixed compilation on Solaris and other platforms that do qualify address as const in dladdr function (github 54).
    • Dropped dependency on Boost.LexicalCast.
  • Test:
    • Boost.test v3.8 see the Changes log for more details.
    • Breaking changes
      • The master_test_suite_t object is no more copyable
    • New feature:
      • Dataset test case can now use command line parameters
    • Bug fixes and pull requests:
  • TypeIndex:
    • Dropped dependency on Boost.MPL.
  • Uuid:
    • Breaking change: sha1 detail namespace header redirection for backwards compatibility was removed (PR#69).
    • Added support for std::hash (PR#67).
    • Added support for move semantics on random generators (PR#74).
    • Properly handle EINTR when acquiring entropy (PR#74).
    • Use getrandom(2) instead of getentropy(3) on linux (PR#75).

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang: 3.0, 4.0.1, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1
    • Clang, C++17: 5.0.2, 6.0.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X:
    • Apple Clang: 9.0.0, 9.1.0
    • Apple Clang, C++11: 9.0.0, 9.1.0
    • Apple Clang, C++14: 9.0.0, 9.1.0
    • Apple Clang, C++17: 9.1.0
    • Apple Clang, C++1z: 9.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

Boost's additional test compilers include:

  • Linux:
    • Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0
    • Clang, C++17: 5.0.2, 6.0.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X:
    • Apple Clang: 9.0.0, 9.1.0
    • Apple Clang, C++11: 9.0.0, 9.1.0
    • Apple Clang, C++14: 9.0.0, 9.1.0
    • Apple Clang, C++17: 9.1.0
    • Apple Clang, C++1z: 9.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

Acknowledgements

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