Boost
Releases
arrow_drop_down
Newest Release (1.91.0)
April 15, 2026
Library dependency calculations will be generated soon, please check back later.
Platform File SHA256 Hash
Unix boost_1_91_0.tar.bz2 de5e6....264f5
boost_1_91_0.tar.gz 57343....3a463
Windows boost_1_91_0.7z 9446c....24e65
boost_1_91_0.zip 69c6f....40a77
Windows (Binary) boost_1_91_0-msvc-14.1-32.exe 56eef....ab442
boost_1_91_0-msvc-14.1-64.exe d6ca2....4f26a
boost_1_91_0-msvc-14.2-32.exe bc3cf....24ee7
boost_1_91_0-msvc-14.2-64.exe 73dff....e5ccd
boost_1_91_0-msvc-14.3-32.exe 484e1....c5f52
boost_1_91_0-msvc-14.3-64.exe b92b2....1bbc7
boost_1_91_0-msvc-14.5-32.exe d96cd....0c448
boost_1_91_0-msvc-14.5-64.exe f9e05....2faf5

Version 1.91.0

General Notes

  • StaticAssert has been merged into Config. This includes code, tests and documentation. For backward compatibility git submodule, CMake and b2 targets of StaticAssert are still available; the targets simply introduce a dependency on Config. Eventually, the submodule and targets will be removed. Users are recommended to update their dependencies on StaticAssert to replace it with Config. No C++ code modifications are necessary. Most Boost libraries have been updated accordingly.

New Libraries

  • Decimal:

    • An implementation of IEEE754 Decimal Floating Point Numbers, from Matt Borland and Christopher Kormanyos.

Updated Libraries

  • any:

    • Fixed import std detection in CMake.

    • Simplified implementation of boost::anys::basic_any.

  • Asio

    • Added optional binary versioning via an inline namespace, allowing multiple Asio versions to coexist in the same process without symbol conflicts.

    • Changed the default Windows mutex implementation from CRITICAL_SECTION to SRWLOCK.

    • Added a "slim" mutex implementation based on std::atomic, reducing state size for strands, sockets, and other descriptors.

    • Added support for compilation under Cygwin64, including without __USE_W32_SOCKETS.

    • Added the ability to override BOOST_ASIO_DECL before including Asio headers.

    • Fixed MSG_NOSIGNAL handling on NetBSD.

    • Fixed the build with recent Boost versions that no longer support linking against boost_system.

    • Fixed compatibility with musl libc on older Android.

    • Fixed detection of std::aligned_alloc on older Apple platforms.

    • Fixed a warning in serial_port_base::character_size::store with MSVC.

    • Clarified the IPv4 vs IPv6 semantics of ip::multicast::outbound_interface in the documentation.

    • Updated TLS v1.3 context initialisation to correctly detect LibreSSL support.

    • Fixed compatibility with recent OpenSSL API changes around X509 constness.

    • Consult the Revision History for further details.

  • Atomic:

    • Fixed compilation of thread_pause on PowerPC with Apple compilers. (#79)

  • Beast:

    • Fixed typecast warnings in inflate_with_eb.

    • Enforced 8KB sanity limit on chunk headers.

    • Made OpenSSL an optional dependency for tests.

    • Removed dependency on Boost.StaticAssert.

    • Added HTTP2-Settings to HTTP field enum.

  • Charconv:

    • Fixed overflow in to_chars of negative 128-bit integers whose absolute value is less than 2^64

  • Core:

    • The header boost/is_placeholder.hpp has been moved from Bind to Core. (#90)

  • Describe:

    • Under C++20, described nested enums now work when the enclosing class is still incomplete. (Thanks to Julien Blanc.)

    • Made enum_to_string constexpr. (Thanks to Julien Blanc.)

  • DynamicBitset:

    • Added a missing friend declaration for operator-( const bit_iterator_base< Iter > & lhs, const bit_iterator_base< Iter > & rhs ).

    • Fixed compilation with standard library implementations which use raw pointers as iterators.

    • Fixed from_block_range() to prevent it from setting any bit in the unused part of the bitset.

  • Exception:

    • Added customizable serialization API, built-in support for Boost.JSON and nlohmann/json.

  • Filesystem:

    • Boost.Filesystem now defines and uses its own platform macros BOOST_FILESYSTEM_POSIX_API and BOOST_FILESYSTEM_WINDOWS_API. The old BOOST_POSIX_API and BOOST_WINDOWS_API macros are still defined by Boost.System. Boost.Filesystem will check that the two sets of macros are in sync and by default will fail to compile if not. The compilation error can be reduced to a warning by defining BOOST_FILESYSTEM_ALLOW_SYSTEM_API_MISMATCH to 1 or disabled entirely by defining it to 2. Note that in this case the error code values reported by Boost.Filesystem will not match the error category.

    • On POSIX platforms not supporting openat and related APIs, fixed an error reported by recursive_directory_iterator increment when the iterator encounters a dangling symlink and following symlinks is disabled.

    • Breaking change for Cygwin users. The library now treats Cygwin as a POSIX platform. This has several user-facing consequences, in particular:

      • The path::value_type type has changed from wchar_t to char. As on other POSIX platforms, wide character paths will be converted to the narrow character encoding using the locale set by path::imbue. Note that since Cygwin is running on top of Windows, it will also perform character code conversion internally. It is important that locale in the Cygwin environment is configured correctly.

      • Path syntax now follows POSIX conventions, Windows-specific paths (e.g. UNC paths, drive names and path prefixes) are not supported.

      • Certain Windows-specific parts of the API will become inaccessible. Since reparse points are a Windows-only feature, file_type::reparse_file will not be reported for files. Reparse point handling is dependent on Cygwin runtime behavior.

      • Cygwin has its own implementation of symlinks that is incompatible with native Windows symlinks. Boost.Filesystem will now create and operate on Cygwin symlinks.

      • Error codes reported by Boost.Filesystem will now use POSIX errno values.

    • On DragonFly BSD, NetBSD and Solaris, Boost.Filesystem default path locale now uses UTF-8 for path character encoding.

    • On Linux, use read/write loop implementation of copy_file and copy for configfs, securityfs, cgroup and cgroup2 filesystems, in addition to the previously blacklisted filesystems.

  • JSON:

    • Changed value construction from std::initializer_list to use value_from.

  • LEAF:

    • Added customizable serialization API, built-in support for Boost.JSON and nlohmann/json.

    • Added support for using LEAF error objects across DLL boundaries on Windows (off by default).

    • Refinements in the internal TLS API (e.g. Win32, embedded).

    • Improvements in the diagnostics system and in the on_error implementation.

    • Implementation quality improvements (e.g. more precise use of noexcept).

    • Removed the deprecated verbose_diagnostic_info (replaced by diagnostic_details).

  • LexicalCast:

    • Implemented initial version of C++20 module boost.lexical_cast.

  • Log:

    • Enabled building interprocess communication support on Cygwin by default.

  • Math:

    • Added find_non_centrality finding function for non_central_f_distribution

    • Added parameter finding function for non_central_t_distribution

    • Added function for the log of the incomplete gamma function, lgamma_q

    • Added function for the log of the lower incomplete gamma function, lgamma_p

    • Added domain() function for pchip

    • Fixed broken CUDA support in the logistic distribution

    • Fixed incorrect floating point traits for Windows on ARM64

    • Fixed incorrect result ibeta for large arguments

    • Fixed incorrect ellint_2 for N * PI / 2 for phi argument.

    • Require user to explicitly enable CUDA rather than assuming based off presence of NVCC

  • MultiIndex:

    • Breaking change: All type lists accepted or provided by the library (indexed_by, tag, nested typedefs index_specifier_type_list, index_type_list, iterator_type_list and const_iterator_type_list) are no longer based on Boost.MPL but instead they are now Boost.Mp11 lists. As a result, Boost.MultiIndex doesn’t depend anymore on Boost.MPL. It is expected that most user code won’t be impacted by this change, but the previous behavior may be restored, however, by globally defining the macro BOOST_MULTI_INDEX_ENABLE_MPL_SUPPORT. Legacy support for Boost.MPL may be eventually deprecated and removed in the future.

    • Breaking change: composite_key and associated class templates (composite_key_equal_to, composite_key_compare, composite_key_hash) have been made variadic (previously the maximum number of template arguments was limited by BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE). This change should be transparent to users, with the exception that composite_key::key_extractors returns a std::tuple instead of a boost::tuple (and similarly for the rest of affected class templates).

    • Removed internal workarounds and fallbacks to support pre-C++11 compilers.

  • MSM:

    • New features (backmp11):

      • Improve support for the deferred_events property in hierarchical state machines (#173)

      • Support conditional deferral with the deferred_events property (#155)

      • Simplified functor signatures (#175)

      • Merge queued and deferred events into a single event pool (#168)

      • Small object optimization for events in the event pool (#172)

      • Improve runtime performance with a flat_fold dispatch strategy (#180)

      • Further optimize compilation, with up to 25% faster compile times and lower RAM consumption compared to version 1.90

    • Bug fixes (backmp11):

      • Incorrect FSM type in calls to on_entry(…​) and on_exit(…​) (#167)

      • Completion events fire too often (#166)

      • Transitions in hierarchical state machines are not selected correctly (favor_compile_time) (#200)

      • state_machine cannot be moved (#205)

    • Breaking change (backmp11): Direct access to the event pool is changed from public to protected, because manipulating it outside of the library code can lead to undefined behavior.

  • Optional:

    • For compilers with full C++11 support (including "unrestricted unions" and ref-qualifiers) changed the implementation from aligned storage to union storage. This enables the gradual constexpr support:

      • In C++11, some constructors and const-qualified accessors become usable in compile-time contexts (are core constant expressions) for types satisfying certain constraints.

      • In C++14 even some mutating operations become core constant expressions (those that do not require changing the state of optional from not having a value to having a value), for co-operating types.

      • In C++17 all constructors (including copy and move) become core constant expressions for co-operating types.

      This addresses issues #132 and #143.

    • Breaking change. Abandoned the mechanism for customizing swap. Hardly anyone knows about this mechanism and it was never documented.

    • Applied a couple of small changes to get closer to the interface of std::optional:

      • Enabled syntax o = {} for putting optional objects to no-value state.

      • Enabled syntax o.value_or({}), which uses a default-constructed T.

      • Construct o = u, where o is of type optional<T> and u is of type U convertible to T, does not create a temporary T.

    • Added a conversion from optional<T>& to optional<T&>. This addresses #142.

    • none_t is now std::equality_comparable, which means that none_t and optional<T> model concept std::equality_comparable_with (for std::equality_comparable T), which means that you can std::ranges::find(rng, boost::none) for a range of optional objects.

    • Warning. In the future releases we intend to introduce the range interface in optional, so that std::ranges::range<optional<T>> will be true. This will affect the overload resolution in programs in certain cases that make decisions based on predicates such as std::ranges::range. For instance, the following code will start behaving differently:

      template <typename T>
      void serialize(T const& v)
      {
        if constexpr (std::ranges::range<T>)
          serialize_as_range(v);
        else if constexpr (custom::is_optional_like<T>)
          serialize_as_optional(v);
        else
          serialize_as_value(v);
      }
  • PFR:

    • Added experimental C++26 Reflection based implementation. Define BOOST_PFR_USE_CPP26_REFLECTION macro to 1 to enable.

    • boost::pfr::for_each_field*() functions now work well with stateful visitors.

  • Random:

    • Fixed unsigned types in binomial_distribution being inadvertently unsupported.

  • Redis:

    • Added built-in support for Sentinel deployments, which can be configured using config::sentinel. The library handles master/replica discovery, error detection, and reconnection automatically (PR#345, PR#391, #237).

    • Added generic_flat_response, a high-performance replacement for flat_response that uses contiguous memory and performs zero allocations in steady state. Many thanks to Nikolai Vladimirov for the PR (PR#340, PR#356, PR#358, PR#378, PR#383, #263).

    • General improvements to server push handling:

      • Added support for subscription tracking, which restores active subscriptions after each reconnection. Can be accessed using request::subscribe, request::psubscribe, request::unsubscribe and request::punsubscribe (PR#375, #367).

      • Added push_parser, a view that facilitates parsing PubSub-related messages (PR#390, #349).

      • connection::async_receive and connection::receive are now deprecated. Users should prefer async_receive2, which allows for faster batch processing (PR#381, PR#340, #331).

      • consume_one is now deprecated. Users should prefer generic_flat_response::clear, instead. See the PubSub examples for more details.

      • Improved the documentation and examples.

    • config::username, config::password, config::client_name and config::database_index are now deprecated. Users should prefer config::setup, instead. Added request::hello and request::hello_setname to simplify composing setup requests (PR#392).

    • Log message levels have been adjusted to be more relevant: level::error for configuration and network errors, level::info for successful connection attempts, and level::debug for verbose output (PR#389, #395).

    • Added request::append() to concatenate request objects (PR#342, #341).

    • Fixed a problem causing request::push_range to generate invalid commands when passed a range with std::tuple elements (PR#363, #360).

    • Removed <ostream> from public headers to make them more lightweight (PR#364, #361).

  • Stacktrace:

    • Removed the compile time check for a possibly incompatible runtime. As a result there are no false positives and the from_exception functionality just works out-of-the-box. Rare cases of incompatible/leaking runtimes are now reported at runtime.

    • Disable from_exception on cygwin (PR#219). Many thanks to David McFarland for the PR!

    • Removed the has_addr2line link with C Standard Library to simplify builds with non system-default `libstdc.so`

  • System:

    • The return type of operator|(result<T&>, U) has been changed to non-reference.

    • Pointers to members in r & f are now supported (by using boost::compat::invoke).

    • A CMake config file is now installed, even though the library is header-only. This avoids breaking third-party CMakeLists.txt files that contain find_package(Boost COMPONENTS system …​).

    • error_code is now even more constexpr under C++20 and later.

    • Added unsafe_value to result.

    • Changed result<>::operator* and result<>::operator-> to throw when !has_value(), instead of having that as a precondition. The old behavior is now spelled unsafe_value().

    • Added boost/system/unwrap_and_invoke.hpp.

  • Test:

    • Add friend operators for proper comparisons of std::optional with GCC < 10

  • TypeIndex:

    • Optimized CTTI type comparisons starting from C++20.

    • ctti_type_index::name() now returns pretty value by default in C+\+14 and more modern C\+\+ standards. Reduced the size of library binaries.

  • Unordered:

    • Fixed the returned value of range insertion in concurrent containers (PR#344).

  • UUID:

    • Added from_chars to boost/uuid/uuid_io.hpp.

    • Added a noexcept operator() overload to string_generator.

    • string_generator now supports the Unicode character types in addition to char and wchar_t.

    • Most uuid accessors, operations, and to_chars are now constexpr when possible (on C++14 and higher and on recent compilers).

    • Added SIMD implementation of to_chars, which can offer up to 5.5x performance improvement in UUID formatting. (Andrey Semashev)

    • Added SIMD implementation of from_chars, which can offer up to 13x performance improvement in UUID parsing. (Andrey Semashev)

    • Added uuid_from_string to boost/uuid/uuid_io.hpp.

    • Added a dedicated invalid_uuid exception class, derived from std::runtime_error for backward compatibility.

  • URL:

    • Features:

      • All parse functions are now constexpr under C++20, enabling compile-time URL parsing and validation (PR#976).

      • Added get_or for query containers, returning a default value when a key is not present (PR#953).

      • Added standalone decode and decoded_size free functions (PR#952).

      • Added user-provided RangeRule support for grammar::range, allowing custom grammar rules (PR#950).

      • Specialized std::ranges::enable_borrowed_range for all view types (PR#966).

      • Added EBO and default construction for token_rule_t (PR#964).

      • Added natvis visualizers for segments (PR#962).

    • Performance:

      • Internal URL offsets changed from size_t to uint32_t, reducing object size on 64-bit platforms (PR#969).

    • Fixes:

      • normalize_path ambiguity from dot-dot cancellation (PR#986).

      • parse_query guard for empty string_view inputs (PR#949).

      • params_iter_impl::decrement() decoded size for values containing = (PR#978).

      • decode_view::remove_prefix/remove_suffix assertion (PR#978).

      • decode_view completeness for pct_string_view::operator*() (PR#963).

      • Example router is now move-only (PR#959).

      • GCC false-positive -Wmaybe-uninitialized in tuple_rule (PR#981).

      • Security review by Laurel Lye Systems Engineering: three rounds of assessment, 21 confirmed fixes, public interface boundary tests and fuzz tests added (PR#982, PR#988).

    • Documentation:

      • Added design rationale page (PR#987).

      • Documented plus scheme convention (PR#970).

      • Removed legacy QuickBook documentation.

  • Variant2:

    • holds_alternative<T> and get<T> have been relaxed to no longer require T to occur exactly once in the list of alternatives. It now must occur at least once.

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

Acknowledgements

Marshall Clow, Glen Fernandes and Ion GaztaƱaga managed this release.