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

Version 1.78.0 beta 1

November 11th, 2021 20:11 GMT


Beta Downloads
PlatformFileSHA256 Hash

New Libraries

  • No new libraries.

Updated Libraries

  • Assert:
    • Added source_location::to_string.
  • Beast:
    • This maintenance update brings minor bug fixes and updated CI reporting.
    • Fixed security vulnerability CVE-2016-9840 in zlib implementation.
    • Fixed WebSocket permessage_deflate implementation. This should result in an increase in compression performance when using Beast WebSockets.
    • Removed the test stream and test framework's dependency on RTTI. You can now use our handy test stream to check your embedded asynchronous communications code!
    • We'd love to know how you or your company use Beast, consider adding an entry to the Companies and Individuals Using Beast list.
    • See the full Release Notes for a complete list of changes.
  • Core:
    • Added a generic implementation to <boost/core/cmath.hpp>, enabled when BOOST_CORE_USE_GENERIC_CMATH is defined or when the platform does not provide the necessary facilities in <cmath>.
    • Added boost::core::type_name, a utility function that returns the name of a type as a string.
    • Added boost::span, a C++11 implementation of C++20's std::span (Glen Fernandes).
  • Describe:
    • Added has_describe_enumerators, has_describe_bases, has_describe_members.
    • Added enum_to_string, enum_from_string.
    • Added relational and stream insertion operators.
    • Added descriptor_by_name, descriptor_by_pointer.
  • DLL:
    • Fixed missing #include, thanks to Denis Blank (PR#54)
    • Dropped TravisCI in favor of GithubAction CI
  • JSON:
    • Standalone mode of the library is deprecated.
    • Allow external libraries to forward declare value_to and value_from.
    • Fixed signed integer overflow in number parsing.
    • Add support for /Zc:implicitNoexcept- on MSVC.
  • Lambda2:
    • Added special cases in operator<< and operator>> when the first argument is a stream, to allow std::cout << _1.
    • Added operator->*.
    • Added first, second.
  • Math:
    • Add support for cubic roots.
    • Add support for constexpr versions of various standard library math routines.
    • Add support for Bezier polynomials.
    • Improve worst-case tanh-sinh integration performance.
    • Disable inadvertant use of integral types in integration routines.
    • Minor update for erf approximations when the result is with 2ulp of 1.
    • Allow Bernoulli code to be used on platforms with no atomic integers.
    • Improve the mode of the non-central Chi Squared distribution.
    • Improve certain edge cases for <cstdfloat> complex-valued elementary functions, see #507.
  • Multi-index Containers:
    • Added contains to key-based indices (issue #35).
    • Added merge operations to key-based indices. The functionality goes beyond the standard specification for (unordered) associative containers in a number of ways, most notably:
      • The source index can be of any type, including non key-based indices.
      • Partial merge is provided: for instance, x.merge(y,first,last) merges only the elements of y within [first,last).
    • Previous versions of splice for sequenced and random access indices were destructive, i.e. elements were copy-inserted into the destination and then erased from the source. Now, splice is based on node transfer much as merge in key-based indices, and has been similarly extended to accept source indices of any type: in fact, splice can be regarded as a frontend to the same functionality provided by merge in key-based indices. For reasons of backwards compatibility, the destructive behavior of splice has been retained in the case that the source and destination containers have unequal allocators.
    • The fact has been documented that index iterator types do only depend on node_type and the position of the index in its multi_index_container, (except for hashed indices, where uniqueness/non-uniqueness is also a dependency). This has implications on the validity of iterators to elements transferred by merge or splice. This property is a variant of what has been called SCARY iterators in the C++ standard mailing lists. SCARYness is currently (August 2021) not mandated for standard containers.
    • Iterator SCARYness is now also preserved in safe mode.
  • Multiprecision:
    • Rework rational_adaptor to remove dependency on Boost.Rational and improve performance.
    • Fix issue with type_traits and clang, see #383.
    • Fixed buggy Lehmer's GCD routine, see #370.
    • Fix mpc_complex constructors so that lossy conversions are explicit, see #363.
    • Correct miscellaneous configuration issues (Intel intrinsic usage and Apple clang).
    • Correct some iostream operators for unsigned char types.
    • Correct mpq_rational conversions to integer types, see #342.
  • PFR:
    • Added missing #include <memory> for inclusion of std::addressof
    • Fixed -Wzero-length-array warning when dealing with empty aggregates
    • Fixed compilation on msvc compilers <= 1920 (thanks to Alexey Romanov aka @alexey-romanov)
    • Added basic CMakeLists.txt support (thanks to @pdimov aka Peter Dimov)
    • Multiple improvements for docs, including links to
    • Added misc/ script to remove boost:: and BOOST_ prefixes
  • Predef:
    • Version 1.13.1
    • Fix spelling of "epoch".
    • Add missing parenthesis in sparc.h (from tkoecker).
    • Update documentation to use Rouge code styling and Amber general style.
  • Regex:
    • Breaking Change: Change \B to be the opposite of \b as per Perl behaviour.
    • Change w32_regex_traits.hpp so that windows.h is no longer included.
    • Fxed fuzzing related issues #151, #152, #153, #156.
  • System:
    • Added support for source locations to error_code.
    • Added error_code::to_string, error_condition::to_string, error_code::what.
    • system_error::what() now contains the source location, if present.
    • Added result<T, E = error_code>, a class holding either a value or an error, defined in <boost/system/result.hpp>.
  • Variant2:
    • Added <boost/variant2.hpp>.
    • Added unsafe_get<I>.
    • Added visit_by_index.
    • Added operator<<.

Updated Tools

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0
    • Clang, C++11: 3.4, 11.0.0
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0
    • Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0
    • GCC: 4.6.3, 11
    • GCC, C++11: 4.7.3, 4.8.5, 11
    • GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11
    • GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11
    • GCC, C++20: 8.0.1, 9.1.0, 10, 11
  • OS X:
    • Apple Clang: 11.0.3
    • Apple Clang, C++11: 11.0.3
    • Apple Clang, C++14: 11.0.3
    • Apple Clang, C++17: 11.0.3
    • Apple Clang, C++20: 11.0.3
  • Windows:
    • Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2


Marshall Clow, Michael Caisse and Glen Fernandes managed this release.