版本 1.89.0
2025年8月14日 02:16 GMT
文档
新库
- Bloom:
- filters,来自 Joaquín M López Muñoz。
更新的库
-
Any:
-
对 C++20 模块的初始支持。更多信息请参阅文档。
-
Asio:
- 为
execution_context
、io_context
和 thread_pool
添加了分配器构造函数,所提供的分配器将用于分配与执行上下文相关的对象。
- 添加了一个新的配置参数“timer”/“heap_reserve”,可用于为计时器队列的堆保留向量空间。
- 添加了一个新的配置参数“resolver”/“threads”,它指定了
async_resolve
用于模拟异步地址解析的内部线程数。
- 从便捷头文件中移除了
deadline_timer
、basic_deadline_timer
和 time_traits
boost/asio.hpp.
- 确保
connect_pipe
创建的 Windows 命名管道使用唯一的名称,以避免在 Asio 被用于多个独立的插件 DLL 时发生冲突。
- 将
BOOST_ASIO_CONCURRENCY_HINT_SAFE
更改为与 io_context
默认构造函数保持一致。
- 修复了
BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO
的文档,以反映注册锁定仍然启用。
- 为可选依赖项添加了单独的b2andcmake构建目标。
- 将
[[noreturn]]
属性添加到 boost::asio::detail::throw_exception
。
- 修复了
co_spawn
以遵循非重入调用完成处理程序的异步操作要求。
- 添加了关于
basic_signal_set
异步信号安全性的文档说明。
- 修复了在不同平台上出现的各种小的编译错误。
- 请参阅 修订历史记录 以获取更多详细信息。
-
Atomic:
- 在基于汇编的 x86、AArch32、AArch64 和 PPC 后端中添加了 TSAN 插装。这可以消除使用 Boost.Atomic 进行线程同步的代码中 TSAN 的误报。
- 遵循 Boost 1.84 中的公告,移除了对 Windows 10 以下版本的支持。
- 给 MinGW-w64 用户的一点提示。由于 MinGW-w64 上的 Windows SDK 头文件默认将
_WIN32_WINNT
定义为较旧的 Windows 版本,因此在编译 Boost.Atomic 和使用 Boost.Atomic 的代码时,您可能需要定义 _WIN32_WINNT=0x0A00
或 BOOST_USE_WINAPI_VERSION=0x0A00
。
- 对 Windows CE 的支持已被弃用,将在未来的版本中移除。
- 添加了对定时等待操作的支持。
- 暴露了
thread_pause
操作,该操作可用作自旋循环中的退避措施。增加了对 PowerPC 的支持,并改进了 thread_pause
对 AArch64 的支持。
- 移除了
BOOST_ATOMIC_NO_ATOMIC_FLAG_INIT
宏定义。由于该库现在需要 C++11,因此 BOOST_ATOMIC_FLAG_INIT
始终受支持。
- 为原子枚举启用了按位操作。当枚举用于实现位掩码时,这可能很有用。
-
Beast:
- 修复
- 在
async_base
中有条件地定义了 immediate_executor_type
。
- 向
detail/cpu_info.hpp
添加了缺失的 cstdint
头文件。
- 修复了
std::is_trivial
弃用警告。
-
handshake_timeout
现在适用于读取期间的关闭握手。
- 改进
- 用
net::executor_work_guard
替换了 detail/work_guard.hpp
。
- 修复了在 MinGW 中构建测试的移植性问题。
- 文档
- 删除了文档中已移动的部分。
- 移除了测试中多余的日志消息。
- 致谢
-
Charconv:
- 修复了
from_chars
对于整数类型的性能下降问题。
- 修复了
to_chars
对于指定精度的浮点类型出现的舍入和尾数小数位错误。
-
Cobalt:
- 对 generator 和 promise 进行了 move 赋值修复。
- 修复了内部异常。
- 添加了 IO 库。Cobalt.io 提供了一个大量的 asio 子集作为编译库。
-
Compat:
- 添加了
move_only_function.hpp
。
-
ContainerHash:
- 添加了
hash_is_avalanching
特性类。
-
Conversion:
- 添加了在 constexpr 中使用
polymorphic_downcast
和 polymorphic_cast
的能力(需要 C++20)。
-
Core:
- 修复了
bit_ceil
在输入为 0 时返回 1,符合规范。(PR#199)
- 为
boost::core::string_view
添加了对 std::format
的支持。(#190)
-
Detail:
- 由
BOOST_BITMASK
生成的运算符现在使用枚举的底层类型来实现位运算符。这些运算符在可能的情况下被标记为 noexcept
和 constexpr
。
- 由
BOOST_BITMASK
生成的函数 bitmask_set
被标记为已弃用。在未来的版本中,BOOST_BITMASK
将不再生成此函数。建议用户使用双重否定(!!mask
)来测试值是否为零。这会影响例如 Boost.Filesystem 中定义的枚举。
-
DLL:
- 修复了 Cygwin 上的编译和导出问题。非常感谢 Luohao Wang 提交的 PR!
- 修复了 FreeBSD 上的构建问题。感谢 ash 的 bug 报告!
- 添加了
BOOST_DLL_USE_STD_FS
CMake 选项,以匹配预处理器选项。感谢 Yury Bura 提交的 PR!
-
Filesystem:
- 修正了
path::append
中关于比较指向可能不相关对象的指针的 ASAN 警告。(#335)
-
几何:
- 主要改进
- 改进
- 破坏性更改
- 已解决的问题
-
#1221 具有整数坐标的多边形差集产生无效的多边形,内部不连通
-
#1295 交集错误(结果多边形等于输入多边形中最大的那个)
-
#1349 多边形差集产生错误结果
-
#1382 Buffer 操作产生自交
- 各种错误和警告修复
-
Hash2:
- 添加了 Blake2 算法(`blake2s_256`,`blake2b_512`)。
- 添加了 XXH3 算法(`xxh3_128`)。
-
Iterator:
- 修复了
filter_iterator
的复制/转换构造函数,该构造函数以前可能产生无效的迭代器。(#92)
- 在
iterator_facade
中移除了 is_trivial
的使用,因为它在 C++26 中已被弃用。(#93)
-
iterator_facade::operator[]
现在总是返回一个代理,而不是根据条件返回一个值或代理。这允许用户绑定到该运算符结果的引用,而不管值类型是否为可平凡复制的。(#61)
iterator_facade::operator[]
返回的代理现在支持将解引用运算符转发给被引用的值。这允许 it[n]->foo()
和 (*it[n]).foo()
表达式编译。
iterator_facade::operator[]
返回的代理现在在其赋值运算符中实现了完美转发。
-
JSON:
- 改进了文档。
- 可选的范围被归类为可选对象。
- 类支持描述现在也适用于带有基类的类型。
-
Log:
- 添加了对
BOOST_LOG_WITHOUT_ASIO
配置宏的支持,该宏可用于移除对 Boost.Asio 的依赖并禁用相关功能。
- 在组合日志文件名时,在
text_file_backend
中使用与区域设置无关的格式化文件计数器。这修复了在 file_collector::scan_for_files
中后续解析文件名时出现的故障。(PR#246)
- 添加了一个新的
wrap_filter
工具,可以简化将用户定义的函数对象注入过滤表达式。(#195)
-
数学:
- 在构建中添加了显式的 C++14
<type_traits>
和 constexpr
要求。
- 收集了适用于各种平台 GPU 支持的修复。
- 修复了 x = 0 时不完整的 gamma 函数。
- 修复了 jSO 算法中的外部归档错误。
- 修复了 ibeta 中的数值下溢。
- 修复了 ibeta 的逆函数对于大的 a 和 b 值。
- 修复了变长函数,使其在 C++26 下安全。
-
MQTT5:
- 修复了在代理列表中 URI 路径的错误解析(#31)。
- 在
CONNECT
数据包中显式设置了默认最大数据包大小。(#33)。
- 修复了当最大数据包大小值很大时导致的高 CPU 使用率(#33)。
-
Multiprecision:
-
重大更新。
- 添加了一个新的后端类型:
cpp_double_fp_backend
。
- 修复了与 Boost.Serialization 的命名空间冲突。
-
MySQL:
caching_sha2_password
认证插件现在可以在没有 TLS 的情况下使用。这是 MySQL 8 及以上版本的默认设置。尝试使用此插件的纯文本连接不再会因 client_errc::auth_plugin_requires_ssl
而失败(#313)。
- 修复了一个导致在目标数据库不存在且使用
caching_sha2_password
时,在连接建立过程中返回 client_errc::incomplete_message
的问题。现在会返回适当的服务器生成的诊断信息。请参阅问题 #468 和 #488。
- 握手算法现在对协议违规更加健壮(#469)。
- 修复了因缺少 include 文件导致 gcc-15 构建失败的问题(PR#475)。感谢 hhoffstaette 的 PR。
- 添加了 与官方驱动程序的基准测试。
- 优化了
metadata
表示,使其构造更快,内存占用更少(#461)。
-
PFR:
- 根据新的 Boost 推荐实践重写了 C++20 模块。更多信息请参阅文档。
- 修复了在现代 clang 编译器上 C++26 的编译问题。感谢 Valery Mironov 的报告!
- 支持使用“零长度数组”编译器扩展的类型。
- 修复了拼写错误。感谢 Egor 指出问题!
- 为
boost::pfr::names_as_array(empty_struct{})
返回 std::array<std::string_view, 0>
类型,以允许 for (std::string_view name : boost::pfr::names_as_array(empty_struct{}))
编译。非常感谢 sabudilovskiy 的 bug 报告!
-
process:
- 添加了
v1.hpp
以模拟 v1 process.hpp
的包含。
- 修复了 Windows 路径转义问题。
- 修复了退出代码问题,即 terminate 和 async_wait 导致退出代码值丢失。
-
Random:
- 修复了
beta_distribution
生成 NAN 的问题。
- 提高了
beta_distribution::operator()
的性能。
-
TypeIndex:
-
对 C++20 模块的初始支持。更多信息请参阅文档。
-
Unordered:
- 已弃用的
boost::unordered::hash_is_avalanching
现在是 boost::hash_is_avalanching
在 <boost/container_hash/hash_is_avalanching.hpp>
中的 using 声明。请直接使用该头文件。<boost/unordered/hash_traits.hpp>
将在未来被移除。
- 向开放寻址容器添加了
pull(const_iterator)
。此操作允许通过移动构造高效地移除和检索元素。
-
直方图:
- 更新 CMake 最低版本和 CMake 中的 Python 检测
- 改进文档
- 添加一个示例,说明如何创建一个接受多种非隐式可转换值类型的轴
- 展示了如何在使用维度数据已作为连续数据的情况下,高效地使用
histogram::fill
来处理多维直方图。
- 不要使用已弃用的用户定义字面量运算符形式
- 通过 b2 添加对模块化构建结构的支持
- 修复 MSVC 中关于截断类型的警告
- 添加了收集器累加器,用于存储存储桶中的所有值
- 在 detail 命名空间内的测试和类中进行内部更改
更新了工具
测试的编译器
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 和 Ion Gaztañaga 管理了本次发布。