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

Version 1.84.0

December 13th, 2023 23:54 GMT


PlatformFileSHA256 Hash

Updated default target Windows version

Boost.WinAPI, a library that is used internally by other Boost libraries for defining Windows SDK components, has been updated to target Windows 10 API by default, where possible. This means that Boost libraries will target Windows 10 by default and may not run on older Windows versions. This includes the pre-built binaries that are distributed by Boost.

The affected libraries include:

  • Boost.Atomic
  • Boost.Beast
  • Boost.Chrono
  • Boost.DateTime
  • Boost.DLL
  • Boost.Filesystem
  • Boost.Interprocess
  • Boost.Log
  • Boost.Pool
  • Boost.Process
  • Boost.System
  • Boost.Stacktrace
  • Boost.Thread
  • Boost.UUID

as well as libraries that depend on the above.

Users are able to change the default by defining BOOST_USE_WINAPI_VERSION or _WIN32_WINNT when building and using Boost to the required version number. For example, to build Boost targeting Windows 7 one could use a command line like this:

    b2 variant=release define=BOOST_USE_WINAPI_VERSION=0x0601 stage

Note, however, that individual libraries may have their own requirements on the minimum supported Windows version.

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

New Libraries

  • Cobalt: Basic algorithms and types for C++20 coroutines, from Klemens Morgenstern.
  • Redis: Redis async client library built on top of Boost.Asio, from Marcelo Zimbres Silva.

Updated Libraries

  • Any:
    • C++03 is no longer supported PR#26.
    • Fixed reference documentation generation. Now it is not overwritten by Boost.PFR reference. Thanks to Peter Dimov for the debugging.
  • Asio:
    • Changed to require C++11 as the minimum language standard. C++03 is no longer supported.
    • Removed deprecated functionality from the boost::asio::execution namespace.
    • Removed deprecated invocation and allocation hooks.
    • Added try_send_via_dispatch and try_send_n_via_dispatch functions to channels.
    • Added compatibility between Asio's placeholders and std::bind.
    • Improved C++11 support for channels that have multiple completion signatures.
    • Fixed compatibility between channel asynchronous operations and any_completion_handler.
    • Fixed compatibility between any_completion_handler and compilation using BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT.
    • Added missing equality operators for comparing mixed executor property types belonging to the same category.
    • Fixed an issue where spawn-based stackful coroutines would terminate the program when used with asynchronous operations that have a completion signature starting with std::exception_ptr.
    • Fixed a crash that may occur when attempting to access a default-constructed any_completion_handler object's associators.
    • Fixed ssl::stream<> class's async_handshake operation so that it works with a defaulted completion token.
    • Updated all examples to use C++11 as the minimum language standard.
  • Atomic:
    • C++03 is no longer supported, the minimum required language version is C++11.
    • Added support for x87 extended double with reduced precision, which is used on FreeBSD and OpenBSD. (#14)
    • Support for Windows versions older than Windows 10 is deprecated and will be removed in Boost 1.87.
  • Beast:
    • Support for immediate_executor.
    • Remove deprecated allocation and invocation hooks.
    • Use the explicit type std::size_t when completing transfer_op.
    • server-flex-awaitable example resets parser.
    • Corrected the websocket::stream::async_ping/pong handler requirement.
    • Update documentation for websocket::stream::async_write_some.
  • Chrono:
    • C++03 is no longer supported.
  • ContainerHash:
    • C++03 is no longer supported.
  • Conversion:
    • C++03 is no longer supported PR#27.
  • Core:
    • boost::swap utility function has been renamed to boost::core::invoke_swap to avoid forming a potential infinite recursion when the arguments are not swappable. The new function is defined in boost/core/invoke_swap.hpp and is functionally equivalent to boost::swap. The old boost::swap name is preserved for backward compatibility but deprecated and will be removed in a future release. Its noexcept specification has been removed to avoid compile errors caused by compile-time recursion. BOOST_ALLOW_DEPRECATED_SYMBOLS or BOOST_ALLOW_DEPRECATED can be defined to suppress deprecation warnings for the transition period. (#148)
    • Headers boost/swap.hpp, boost/utility/swap.hpp and boost/core/swap.hpp are deprecated and will be removed. Please, switch to boost/core/invoke_swap.hpp. BOOST_ALLOW_DEPRECATED_HEADERS or BOOST_ALLOW_DEPRECATED can be defined to suppress deprecation warnings.
  • CRC:
    • C++03 support is deprecated and will be removed in release 1.86.
  • DLL:
    • C++03 is no longer supported PR#66.
  • Endian:
    • C++03 is no longer supported.
  • Filesystem:
    • As was announced in Boost 1.82.0, C++03 is no longer supported. A C++11 or later compiler is required.
    • Fixed that some directory_entry observers taking error_code& ec argument did not clear the error code on successful return. (#291)
    • On Windows, improved robustness of date and time conversion and added support for dates before January 1, 1970. (#293)
    • Removed support for Windows CE that was deprecated since Boost.Filesystem 1.79.0.
    • Removed boost/filesystem/string_file.hpp header. The header was deprecated since Boost.Filesystem 1.79.0.
    • Deprecated: Support for Windows versions older than Windows 10 is deprecated and will be removed in Boost 1.87.
  • Geometry:
    • Solved issues
      • #1138 Fix difference of two polygons
      • #1183 Fix for union_ incomplete result polygon
      • #1184 Fix for intersection
      • #1186 Fix for union_ improper inner ring assignment
      • Various fixes of errors and warnings
  • Heap:
    • C++03 support is deprecated and will be removed in release 1.86. New requirement will be C++14.
  • JSON:
    • Implement parsing directly into user types.
    • Add conversion categories for optionals and variants.
    • Relax iterator requirements for constructors from iterator pairs.
    • Fix reading beyond input buffer.
    • Fix inconsistent choice of init list constructor.
  • LEAF:
    • class result<T> marked nodiscard.
    • Added member typedef result<T>::value_type.
    • verbose_diagnostic_info defers conversion to string until an error handling scope is reached.
    • Improved support for embedded development.
    • Improved Visual Studio 2015 compatibility (thanks godmaycrying).
    • Minor bug fixes an improvements.
    • Dropped support for GCC 4.8 and 4.9.
  • LexicalCast:
    • C++03 is no longer supported PR#62.
    • Fixed -Wdeprecated-copy-with-dtor warnings with clang. Thanks to Romain Geissler for the PR PR#59!
    • Dropped dependency on Boost.Range PR#63.
  • Locale:
    • to_title for the WinAPI backend returns the string unchanged instead of an empty string
    • Improved support for char8_t and std::u8string
    • Fix off-by-one error when using negative times PR#198
    • Fix escape-handling of curly braces in format strings #194
    • Fix some build errors and warnings, notably one on MSVC, see #189
  • Lockfree:
    • C++03 support is deprecated and will be removed in release 1.86. New requirement will be C++14.
  • Log:
    • C++03 is no longer supported. A C++11 or later compiler is required.
    • When built with C++11 compilers that are conforming enough for Boost.Regex v5 to be used, Boost.Log no longer links with Boost.Regex prebuilt library, since Boost.Regex v5 is header-only.
    • Support for Windows versions older than Windows 10 is deprecated and will be removed in Boost 1.87.
  • Math:
    • Improve ccmath error detection.
    • Remove use of deprecated std::numeric_limits<>::has_denorm, see 1028.
    • Correct non-convergence bug in non-central-t distribution, see 1035.
    • Adjust Bessel function approximation to [sub 1]F[sub 1] to avoid taking tgamma at a negative integer, see 1034.
    • Avoid spurious overflow and divide by zero in ibeta, see 1006.
    • Improve accuracy when using Sterling's approximation to tgamma, completes work started in 1007.
    • Fix inverse_discrete_quantile for large initial guesses, see 1007.
    • Improve Newton root finding, see 1000.
    • Fix median_absolute_deviation for non-zero centre, see 997.
    • Fix up cstdfloat.hpp for gcc-14.
    • Update to work for the new types declared in <stdfloat>.
    • Change hypergeometric_distribution to use 64 rather than 32 bit integers to avoid unnecessary overflow and restrictions on use.
  • Multi-index Containers:
    • Fixed a serialization-related compile-time bug in old compilers without ADL support (issue #70).
  • Multiprecision:
    • Change boost::array to std::array in the tests, fixes 567.
    • Correct cpp_int::eval_convert_to to be noexcept, fixes 553.
    • Make sure that changing the global precision, also changes the current thread precision.
    • Fix rational_adaptor construction bug, fixes 540.
  • MySQL:
    • Added connection::reset_connection and connection::async_reset_connection. These functions clean session state (including prepared statements, variables, locks and more) without closing and re-opening the connection.
    • Added error codes introduced in MySQL server v8.1.0.
    • Added fuzz testing for the deserialization functions.
  • PFR:
    • Big new feature: field names reflection. Added new constexpr boost::pfr::get_name<N, T>() function that returns a std::string_view with a name of field at index N of an aggregate T. Requires C++20. BOOST_PFR_CORE_NAME_ENABLED is defined to 1 if the functionality is available. Many thanks to Denis Mikhailov, Bela Schaum and X-Ryl669 for the PR PR#129 and implementation ideas.
    • for_each_field() is now constexpr for C++17. Many thanks to Alexander Karatarakis for the PR PR#134.
  • Predef:
    • Version 1.15.0
    • Add detection of Microsoft STL (from Henrik GaƟmann).
  • Random:
    • C++03 is no longer supported.
    • Fixed overflows in tests using Boost.Multiprecision
  • Ratio:
    • C++03 is no longer supported.
    • Support for BOOST_RATIO_EXTENSIONS has been removed. Ratio is now implemented in terms of the standard <ratio> header.
  • Stacktrace:
  • System:
    • Added support for result<U&, E>.
    • Added operator| for result.
    • Added operator& for result.
    • Added operator&= for result.
  • Test:
    • C++03 is no longer supported.
    • Fixed useage of PRIxPTR for glibc 2.2 - 2.17 PR#392
    • Fixed MSVC warning C5263: calling 'std::move' on a temporary object prevents copy elision PR#390
  • Thread:
    • C++03 is no longer supported.
  • TypeIndex:
    • C++03 is no longer supported.
    • Dropped Boost.PP dependency.
  • TypeOf:
    • C++03 is no longer supported.
  • Unordered:
    • Major update.
    • Added boost::concurrent_flat_set.
    • Added [c]visit_while operations to concurrent containers, with serial and parallel variants.
    • Added efficient move construction of boost::unordered_flat_(map|set) from boost::concurrent_flat_(map|set) and vice versa.
    • Added bulk visitation to concurrent containers for increased lookup performance.
    • Added debug-mode mechanisms for detecting illegal reentrancies into a concurrent container from user code.
    • Added Boost.Serialization support to all containers and their (non-local) iterator types.
    • Added support for fancy pointers to open-addressing and concurrent containers. This enables scenarios like the use of Boost.Interprocess allocators to construct containers in shared memory.
    • Fixed bug in member of pointer operator for local iterators of closed-addressing containers (PR#221, credit goes to GitHub user vslashg for finding and fixing this issue).
    • Starting with this release, boost::unordered_[multi]set and boost::unordered_[multi]map only work with C++11 onwards.
  • variant:
    • C++03 is no longer supported PR#107.
    • Dropped Boost.Move and Boost.Bind dependencies.
  • Wave: Fixed bugs:
    • #188: Segmentation fault when "#pragma\n" is encountered

Compilers Tested

Boost's primary test compilers are:

  • Linux:
    • Clang, C++03: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, 14.0.0, 15.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, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • GCC, C++03: 4.6.3, 11, 12
    • GCC, C++11: 4.7.3, 4.8.5, 11, 12
    • GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12
    • GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12
  • OS X:
    • Apple Clang, C++03: 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, 14.3


Marshall Clow and Glen Fernandes managed this release.