这是 Boost 的一个旧版本,发布于 2023 年。当前版本是 1.89.0。
版本 1.84.0
2023年12月13日 23:54 GMT
文档
更新了默认目标 Windows 版本
Boost.WinAPI 是 Boost 库内部使用的用于定义 Windows SDK 组件的库,现已更新为默认支持 Windows 10 API。这意味着 Boost 库将默认支持 Windows 10,可能无法在旧版 Windows 上运行。这包括 Boost 分发的预编译二进制文件。
受影响的库包括:
- 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
以及依赖于以上库的库。
用户可以通过在构建和使用 Boost 时定义 BOOST_USE_WINAPI_VERSION
或 _WIN32_WINNT
来指定所需版本号,从而更改默认设置。例如,要构建支持 Windows 7 的 Boost,可以使用类似以下的命令行:
b2 variant=release define=BOOST_USE_WINAPI_VERSION=0x0601 stage
但是请注意,各个库可能对最低支持的 Windows 版本有自己的要求。
Windows API 版本号列表可以在 此 页面上查看。
新库
- Cobalt:
- Klemens Morgenstern 提供的 C++20 协程的基本算法和类型。
- Redis:
- Marcelo Zimbres Silva 提供的基于 Boost.Asio 的异步客户端库。
更新的库
-
Any:
- 不再支持 C++03 PR#26。
- 修复了引用文档生成。现在不会被 Boost.PFR 引用覆盖。感谢 Peter Dimov 进行调试。
-
Asio:
- 将最低语言标准更改为要求 C++11。不再支持 C++03。
- 移除了
boost::asio::execution
命名空间中已弃用的功能。
- 移除了已弃用的调用和分配钩子。
- 为通道添加了
try_send_via_dispatch
和 try_send_n_via_dispatch
函数。
- 添加了 Asio 的占位符与
std::bind
之间的兼容性。
- 改进了具有多个完成签名的通道的 C++11 支持。
- 修复了通道异步操作与
any_completion_handler
之间的兼容性。
- 修复了
any_completion_handler
与使用 BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
进行编译之间的兼容性。
- 添加了用于比较属于同一类别的混合执行器属性类型的缺失的相等运算符。
- 修复了当与完成签名以
std::exception_ptr
开头的异步操作一起使用时,基于 spawn
的堆栈式协程会终止程序的错误。
- 修复了在尝试访问默认构造的
any_completion_handler
对象关联项时可能发生的崩溃。
- 修复了
ssl::stream<>
类的 async_handshake
操作,使其可以与默认的完成标记一起使用。
- 更新了所有示例以使用 C++11 作为最低语言标准。
-
Atomic:
- 不再支持 C++03,最低要求的语言版本是 C++11。
- 增加了对 x87 扩展双精度(精度降低)的支持,该支持在 FreeBSD 和 OpenBSD 上使用。(#14)
- 对早于 Windows 10 的 Windows 版本的支持已弃用,并将在 Boost 1.87 中移除。
-
Beast:
- 支持
immediate_executor
。
- 移除已弃用的分配和调用钩子。
- 在完成 transfer_op 时使用显式类型 std::size_t。
- 将
BOOST_ASIO_INITFN_RESULT_TYPE
替换为 BOOST_ASIO_INITFN_AUTO_RES
。
-
server-flex-awaitable
示例重置解析器。
- 修正了
websocket::stream::async_ping/pong
处理程序的声明。
- 更新了
websocket::stream::async_write_some
的文档。
-
Chrono:
-
ContainerHash:
-
Conversion:
-
Core:
-
boost::swap
实用函数已重命名为 boost::core::invoke_swap
,以避免在参数不可交换时形成潜在的无限递归。新函数定义在 boost/core/invoke_swap.hpp
中,功能上等同于 boost::swap
。为了向后兼容,保留了旧的 boost::swap
名称,但已弃用,将在未来版本中移除。已移除其 noexcept
说明,以避免因编译时递归引起的编译错误。可以在转换期间定义 BOOST_ALLOW_DEPRECATED_SYMBOLS
或 BOOST_ALLOW_DEPRECATED
来抑制弃用警告。(#148)
- 标头文件
boost/swap.hpp
、boost/utility/swap.hpp
和 boost/core/swap.hpp
已弃用,将被移除。请切换到 boost/core/invoke_swap.hpp
。可以定义 BOOST_ALLOW_DEPRECATED_HEADERS
或 BOOST_ALLOW_DEPRECATED
来抑制弃用警告。
-
CRC:
- C++03 支持已弃用,将在 1.86 版本中移除。
-
DLL:
-
Endian:
-
Filesystem:
- 正如 Boost 1.82.0 中宣布的,不再支持 C++03。需要 C++11 或更高版本的编译器。
- 修正了在某些接受
error_code& ec
参数的 directory_entry
观察者在成功返回时未清除错误代码的问题。(#291)
- 在 Windows 上,改进了日期和时间转换的健壮性,并增加了对 1970 年 1 月 1 日之前的日期的支持。(#293)
- 移除了自 Boost.Filesystem 1.79.0 起已弃用的对 Windows CE 的支持。
- 移除了
boost/filesystem/string_file.hpp
头文件。该头文件自 Boost.Filesystem 1.79.0 起已弃用。
-
已弃用: 对 Windows 10 以下版本的支持已弃用,并将在 Boost 1.87 中移除。
-
几何:
-
Heap:
- C++03 支持已弃用,将在 1.86 版本中移除。新的要求将是 C++14。
-
JSON:
- 实现直接解析到用户类型。
- 为 optional 和 variant 添加了转换类别。
- 放宽了来自迭代器对的构造函数的迭代器要求。
- 修复了读取超出输入缓冲区的问题。
- 修复了初始化列表构造函数选择不一致的问题。
-
LEAF:
- 类 result<T> 被标记为 nodiscard。
- 添加了成员类型 result<T>::value_type。
- verbose_diagnostic_info 延迟到达到错误处理范围后才进行字符串转换。
- 改进了对嵌入式开发的支持。
- 改进了 Visual Studio 2015 的兼容性(感谢 godmaycrying)。
- 小的 bug 修复和改进。
- 放弃了对 GCC 4.8 和 4.9 的支持。
-
LexicalCast:
-
Locale:
-
to_title
对于 WinAPI 后端返回未更改的字符串而不是空字符串。
- 改进了对
char8_t
和 std::u8string
的支持。
- 修复了使用负时间时的偏移一位错误 PR#198
- 修复了格式字符串中花括号的转义处理 #194
- 修复了一些构建错误和警告,尤其是在 MSVC 上,请参阅 #189
-
Lockfree:
- C++03 支持已弃用,将在 1.86 版本中移除。新的要求将是 C++14。
-
Log:
- 不再支持 C++03。需要 C++11 或更高版本的编译器。
- 当使用符合 Boost.Regex v5 使用要求的 C++11 编译器构建时,Boost.Log 不再链接 Boost.Regex 预编译库,因为 Boost.Regex v5 是仅标头库。
- 对早于 Windows 10 的 Windows 版本的支持已弃用,并将在 Boost 1.87 中移除。
-
数学:
- 改进了 ccmath 错误检测。
- 移除对已弃用的 std::numeric_limits<>::has_denorm 的使用,请参阅 1028。
- 修正了非中心 t 分布的非收敛 bug,请参阅 1035。
- 调整 Bessel 函数近似到 [sub 1]F[sub 1],以避免在负整数上调用 tgamma,请参阅 1034。
- 避免在 ibeta 中出现意外溢出和除零错误,请参阅 1006。
- 使用 Sterling 近似法计算 tgamma 时提高精度,完成了在 1007 中开始的工作。
- 修复了 inverse_discrete_quantile 对大初始猜测值的问题,请参阅 1007。
- 改进了 Newton 根查找,请参阅 1000。
- 修复了 median_absolute_deviation 在非零中心值时的错误,请参阅 997。
- 为 gcc-14 修复了 cstdfloat.hpp。
- 更新以支持 <stdfloat> 中声明的新类型。
- 将 hypergeometric_distribution 更改为使用 64 位而不是 32 位整数,以避免不必要的溢出和使用限制。
-
多索引容器:
- 修复了旧编译器(无 ADL 支持)中与序列化相关的编译时 bug(问题 #70)。
-
Multiprecision:
- 在测试中将
boost::array
更改为 std::array
,修复了 567。
- 将 cpp_int::eval_convert_to 修正为 noexcept,修复了 553。
- 确保全局精度更改时,当前线程的精度也会随之更改。
- 修复了 rational_adaptor 的构造 bug,修复了 540。
-
MySQL:
- 添加了
connection::reset_connection
和 connection::async_reset_connection
。这些函数可以在不关闭和重新打开连接的情况下清理会话状态(包括预处理语句、变量、锁等)。
- 添加了 MySQL 服务器 v8.1.0 中引入的错误代码。
- 为反序列化函数添加了模糊测试。
-
PFR:
-
Predef:
- 版本 1.15.0
- 添加了 Microsoft STL 的检测(来自 Henrik Gaßmann)。
-
Random:
- 不再支持 C++03。
- 修复了使用 Boost.Multiprecision 的测试中的溢出问题。
-
Ratio:
- 不再支持 C++03。
- 已移除对
BOOST_RATIO_EXTENSIONS
的支持。Ratio 现在基于标准 <ratio>
头文件实现。
-
Stacktrace:
-
系统:
- 添加了对
result<U&, E>
的支持。
- 为
result
添加了 operator|
。
- 为
result
添加了 operator&
。
- 为
result
添加了 operator&=
。
-
Test:
- 不再支持 C++03。
- 修复了 glibc 2.2 - 2.17 下 PRIxPTR 的使用 PR#392
- 修复了 MSVC 警告 C5263:在临时对象上调用 'std::move' 会阻止副本省略 PR#390
-
Thread:
-
TypeIndex:
- 不再支持 C++03。
-
BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((A)(B)(C)(D))
的语法已更改为 BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(A, B, C, D)
。
- 放弃了 Boost.PP 依赖。
-
TypeOf:
-
Unordered:
-
重大更新。
- 添加了
boost::concurrent_flat_set
。
- 向并发容器添加了
[c]visit_while
操作,包含串行和并行变体。
- 添加了
boost::unordered_flat_(map|set)
和 boost::concurrent_flat_(map|set)
之间高效的移动构造。
- 为并发容器添加了批量访问,以提高查找性能。
- 为检测从用户代码非法重入并发容器添加了调试模式机制。
- 为所有容器及其(非本地)迭代器类型添加了 Boost.Serialization 支持。
- 为开放寻址和并发容器添加了对 Fancy Pointer 的支持。这使得可以使用 Boost.Interprocess 分配器在共享内存中构造容器等场景。
- 修复了开放寻址容器本地迭代器的指针成员运算符中的 bug(PR#221,此问题由 GitHub 用户 vslashg 发现并修复)。
- 从本次发布开始,
boost::unordered_[multi]set
和 boost::unordered_[multi]map
仅支持 C++11 及以上版本。
-
variant:
- 不再支持 C++03 PR#107。
- 放弃了 Boost.Move 和 Boost.Bind 依赖。
-
Wave:修复了 bug
-
#188:遇到 "#pragma\n" 时发生段错误
测试的编译器
Boost 的主要测试编译器是:
- 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 和 Glen Fernandes 管理了此次发布。