| Platform | File | SHA256 Hash | |
|---|---|---|---|
| Unix | boost_1_91_0.tar.bz2 | de5e6b0e4913395c6bdfa90537febd9028ea4c0735d2cdb0cd9b45d5f51264f5 de5e6b0e49....d5f51264f5 de5e6....264f5 | |
| boost_1_91_0.tar.gz | 5734305f40a76c30f951c9abd409a45a2a19fb546efe4162119250bbe4d3a463 5734305f40....bbe4d3a463 57343....3a463 | ||
| Windows | boost_1_91_0.7z | 9446c37fd86fecd95254ebe5d368a66ef9b09cec4592b2746979076657e24e65 9446c37fd8....6657e24e65 9446c....24e65 | |
| boost_1_91_0.zip | 69c6f32fbda3c478fb310ec251e6699e5e584dbc71afb5425c2f6e98c9540a77 69c6f32fbd....98c9540a77 69c6f....40a77 | ||
| Windows (Binary) | boost_1_91_0-msvc-14.1-32.exe | 56eeff9b98ae70620c714665c950b23b5eb58c066ed0221c1e3d01705d5ab442 56eeff9b98....705d5ab442 56eef....ab442 | |
| boost_1_91_0-msvc-14.1-64.exe | d6ca2151050f1acba20527828635c7c99e24049147dbaa992c95ca07d574f26a d6ca215105....07d574f26a d6ca2....4f26a | ||
| boost_1_91_0-msvc-14.2-32.exe | bc3cf648d6f63c57ca7e0a84fb8af904eddb76dfc577a180b87034e962e24ee7 bc3cf648d6....e962e24ee7 bc3cf....24ee7 | ||
| boost_1_91_0-msvc-14.2-64.exe | 73dff92c2d2524b6bbea1db67372cf3186f4af1267d2d40a50093ab1aede5ccd 73dff92c2d....b1aede5ccd 73dff....e5ccd | ||
| boost_1_91_0-msvc-14.3-32.exe | 484e1a2ebe65dea34304c3464944571a17a7703ae3493fc554dd4d2988dc5f52 484e1a2ebe....2988dc5f52 484e1....c5f52 | ||
| boost_1_91_0-msvc-14.3-64.exe | b92b2f93de66b4722dc26513432b6aeb3405e9c77999586c68b7bb20f2c1bbc7 b92b2f93de....20f2c1bbc7 b92b2....1bbc7 | ||
| boost_1_91_0-msvc-14.5-32.exe | d96cd6b62fd0bf1666456a9864f220db45307e5c22853bf81b917cb5f140c448 d96cd6b62f....b5f140c448 d96cd....0c448 | ||
| boost_1_91_0-msvc-14.5-64.exe | f9e05acdeb517ba911cf50e96ee3da06eec803d186d4aa715ad9d8aef722faf5 f9e05acdeb....aef722faf5 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
-
-
An implementation of IEEE754 Decimal Floating Point Numbers, from Matt Borland and Christopher Kormanyos.
-
Updated Libraries
-
any:
-
Fixed
import stddetection in CMake. -
Simplified implementation of
boost::anys::basic_any.
-
-
-
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_SECTIONtoSRWLOCK. -
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_DECLbefore including Asio headers. -
Fixed
MSG_NOSIGNALhandling 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_allocon older Apple platforms. -
Fixed a warning in
serial_port_base::character_size::storewith MSVC. -
Clarified the IPv4 vs IPv6 semantics of
ip::multicast::outbound_interfacein the documentation. -
Updated TLS v1.3 context initialisation to correctly detect LibreSSL support.
-
Fixed compatibility with recent OpenSSL API changes around
X509constness. -
Consult the Revision History for further details.
-
-
-
Fixed compilation of
thread_pauseon PowerPC with Apple compilers. (#79)
-
-
-
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-Settingsto HTTP field enum.
-
-
-
Fixed overflow in
to_charsof negative 128-bit integers whose absolute value is less than 2^64
-
-
Core:
-
The header
boost/is_placeholder.hpphas been moved from Bind to Core. (#90)
-
-
-
Under C++20, described nested enums now work when the enclosing class is still incomplete. (Thanks to Julien Blanc.)
-
Made
enum_to_stringconstexpr. (Thanks to Julien Blanc.)
-
-
-
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.
-
-
-
Added customizable serialization API, built-in support for Boost.JSON and nlohmann/json.
-
-
-
Boost.Filesystem now defines and uses its own platform macros
BOOST_FILESYSTEM_POSIX_APIandBOOST_FILESYSTEM_WINDOWS_API. The oldBOOST_POSIX_APIandBOOST_WINDOWS_APImacros 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 definingBOOST_FILESYSTEM_ALLOW_SYSTEM_API_MISMATCHto 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
openatand related APIs, fixed an error reported byrecursive_directory_iteratorincrement 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_typetype has changed fromwchar_ttochar. As on other POSIX platforms, wide character paths will be converted to the narrow character encoding using the locale set bypath::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_filewill 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
errnovalues.
-
-
On DragonFly BSD, NetBSD and Solaris, Boost.Filesystem default path locale now uses UTF-8 for path character encoding.
-
On Linux, use
read/writeloop implementation ofcopy_fileandcopyfor configfs, securityfs, cgroup and cgroup2 filesystems, in addition to the previously blacklisted filesystems.
-
-
JSON:
-
Changed
valueconstruction fromstd::initializer_listto usevalue_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_errorimplementation. -
Implementation quality improvements (e.g. more precise use of
noexcept). -
Removed the deprecated
verbose_diagnostic_info(replaced bydiagnostic_details).
-
-
-
Implemented initial version of C++20 module
boost.lexical_cast.
-
-
Log:
-
Enabled building interprocess communication support on Cygwin by default.
-
-
Math:
-
Added
find_non_centralityfinding function fornon_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 forpchip -
Fixed broken CUDA support in the logistic distribution
-
Fixed incorrect floating point traits for Windows on ARM64
-
Fixed incorrect result
ibetafor large arguments -
Fixed incorrect
ellint_2for N * PI / 2 for phi argument. -
Require user to explicitly enable CUDA rather than assuming based off presence of NVCC
-
-
-
Breaking change: All type lists accepted or provided by the library (
indexed_by,tag, nested typedefsindex_specifier_type_list,index_type_list,iterator_type_listandconst_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 macroBOOST_MULTI_INDEX_ENABLE_MPL_SUPPORT. Legacy support for Boost.MPL may be eventually deprecated and removed in the future. -
Breaking change:
composite_keyand 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 byBOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE). This change should be transparent to users, with the exception thatcomposite_key::key_extractorsreturns astd::tupleinstead of aboost::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_eventsproperty in hierarchical state machines (#173) -
Support conditional deferral with the
deferred_eventsproperty (#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_folddispatch strategy (#180) -
Further optimize compilation, with up to 25% faster compile times and lower RAM consumption compared to version 1.90
-
-
Bug fixes (
backmp11): -
Breaking change (
backmp11): Direct access to the event pool is changed frompublictoprotected, because manipulating it outside of the library code can lead to undefined behavior.
-
-
-
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
constexprsupport:-
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
optionalfrom 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.
-
-
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-constructedT. -
Construct
o = u, whereois of typeoptional<T>anduis of typeUconvertible toT, does not create a temporaryT.
-
-
Added a conversion from
optional<T>&tooptional<T&>. This addresses #142. -
none_tis nowstd::equality_comparable, which means thatnone_tandoptional<T>model conceptstd::equality_comparable_with(forstd::equality_comparableT), which means that you canstd::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 thatstd::ranges::range<optional<T>>will betrue. This will affect the overload resolution in programs in certain cases that make decisions based on predicates such asstd::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_REFLECTIONmacro to1to enable. -
boost::pfr::for_each_field*()functions now work well with stateful visitors.
-
-
-
Fixed unsigned types in
binomial_distributionbeing inadvertently unsupported.
-
-
-
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 forflat_responsethat 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::unsubscribeandrequest::punsubscribe(PR#375, #367). -
Added
push_parser, a view that facilitates parsing PubSub-related messages (PR#390, #349). -
connection::async_receiveandconnection::receiveare now deprecated. Users should preferasync_receive2, which allows for faster batch processing (PR#381, PR#340, #331). -
consume_oneis now deprecated. Users should prefergeneric_flat_response::clear, instead. See the PubSub examples for more details. -
Improved the documentation and examples.
-
-
config::username,config::password,config::client_nameandconfig::database_indexare now deprecated. Users should preferconfig::setup, instead. Addedrequest::helloandrequest::hello_setnameto simplify composing setup requests (PR#392). -
Log message levels have been adjusted to be more relevant:
level::errorfor configuration and network errors,level::infofor successful connection attempts, andlevel::debugfor verbose output (PR#389, #395). -
Added
request::append()to concatenate request objects (PR#342, #341). -
Fixed a problem causing
request::push_rangeto generate invalid commands when passed a range withstd::tupleelements (PR#363, #360). -
Removed
<ostream>from public headers to make them more lightweight (PR#364, #361).
-
-
-
Removed the compile time check for a possibly incompatible runtime. As a result there are no false positives and the
from_exceptionfunctionality just works out-of-the-box. Rare cases of incompatible/leaking runtimes are now reported at runtime. -
Disable
from_exceptionon cygwin (PR#219). Many thanks to David McFarland for the PR! -
Removed the
has_addr2linelink with C Standard Library to simplify builds with non system-default `libstdc.so`
-
-
-
The return type of
operator|(result<T&>, U)has been changed to non-reference. -
Pointers to members in
r & fare now supported (by usingboost::compat::invoke). -
A CMake config file is now installed, even though the library is header-only. This avoids breaking third-party
CMakeLists.txtfiles that containfind_package(Boost COMPONENTS system …). -
error_codeis now even moreconstexprunder C++20 and later. -
Added
unsafe_valuetoresult. -
Changed
result<>::operator*andresult<>::operator->to throw when!has_value(), instead of having that as a precondition. The old behavior is now spelledunsafe_value(). -
Added
boost/system/unwrap_and_invoke.hpp.
-
-
Test:
-
Add friend operators for proper comparisons of
std::optionalwith GCC < 10
-
-
-
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.
-
-
-
Fixed the returned value of range insertion in concurrent containers (PR#344).
-
-
UUID:
-
Added
from_charstoboost/uuid/uuid_io.hpp. -
Added a
noexceptoperator()overload tostring_generator. -
string_generatornow supports the Unicode character types in addition tocharandwchar_t. -
Most
uuidaccessors, operations, andto_charsare nowconstexprwhen 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_stringtoboost/uuid/uuid_io.hpp. -
Added a dedicated
invalid_uuidexception class, derived fromstd::runtime_errorfor backward compatibility.
-
-
URL:
-
Features:
-
All parse functions are now
constexprunder C++20, enabling compile-time URL parsing and validation (PR#976). -
Added
get_orfor query containers, returning a default value when a key is not present (PR#953). -
Added standalone
decodeanddecoded_sizefree functions (PR#952). -
Added user-provided
RangeRulesupport forgrammar::range, allowing custom grammar rules (PR#950). -
Specialized
std::ranges::enable_borrowed_rangefor 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_ttouint32_t, reducing object size on 64-bit platforms (PR#969).
-
-
Fixes:
-
normalize_pathambiguity from dot-dot cancellation (PR#986). -
parse_queryguard for emptystring_viewinputs (PR#949). -
params_iter_impl::decrement()decoded size for values containing=(PR#978). -
decode_view::remove_prefix/remove_suffixassertion (PR#978). -
decode_viewcompleteness forpct_string_view::operator*()(PR#963). -
Example router is now move-only (PR#959).
-
GCC false-positive
-Wmaybe-uninitializedintuple_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:
-
-
-
holds_alternative<T>andget<T>have been relaxed to no longer requireTto 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.