版本 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:
- C++20 协程的基本算法和类型,来自 Klemens Morgenstern。
- Redis:
- 基于 Boost.Asio 构建的异步客户端库,来自 Marcelo Zimbres Silva。
更新的库
-
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 中移除。
-
几何:
- 已解决的问题
-
#1138 修复两个多边形的差集
-
#1183 修复并集(union_)不完整结果多边形的问题
-
#1184 修复交集(intersection)问题
-
#1186 修复并集(union_)内部环分配不当的问题
- 各种错误和警告修复
-
Heap:
- C++03 支持已弃用,将在 1.86 版本中删除。新要求将是 C++14。
-
JSON:
- 直接将解析结果实现到用户类型中。
- 为 optional 和 variant 添加了转换类别。
- 放宽了迭代器对从迭代器对构造函数的限制。
- 修复了读取超出输入缓冲区的问题。
- 修复了初始化列表构造函数选择不一致的问题。
-
LEAF:
- 类 result<T> 被标记为 nodiscard。
- 添加了成员类型 typedef result<T>::value_type。
- verbose_diagnostic_info 延迟转换为字符串,直到达到错误处理作用域。
- 改进了对嵌入式开发的支持。
- 改进了 Visual Studio 2015 的兼容性(感谢 godmaycrying)。
- 小的错误修复和改进。
- 放弃了对 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 分布中的非收敛错误,请参见 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 的旧编译器中与序列化相关的编译时错误(问题 #70)。
-
Multiprecision:
- 在测试中将
boost::array 更改为 std::array,修复了 567。
- 修正了 cpp_int::eval_convert_to,使其 noexcept,修复了 553。
- 确保更改全局精度也会更改当前线程的精度。
- 修复了 rational_adaptor 的构造函数错误,修复了 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 指针的支持。这使得可以使用 Boost.Interprocess 分配器在共享内存中构建容器等场景。
- 修复了开放寻址容器局部迭代器的指针成员运算符中的错误(PR#221,该问题由 GitHub 用户 vslashg 发现并修复)。
- 从本次发布开始,
boost::unordered_[multi]set 和 boost::unordered_[multi]map 仅支持 C++11 及以上版本。
-
variant:
- 不再支持 C++03 PR#107。
- 放弃了 Boost.Move 和 Boost.Bind 依赖。
-
Wave:修复了错误
-
#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 负责本次发布。