您目前选择的是 1.89.0 版本。如果发布了新版本,您将继续查看 1.89.0 版本,而不是 最新版本。
版本 1.89.0
2025年8月14日 02:16 GMT
文档
新库
- Bloom:
- 过滤器,来自 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 命名管道使用唯一的名称,以免在 Boost.Asio 用于多个独立插件 DLL 时发生冲突。
- 将
BOOST_ASIO_CONCURRENCY_HINT_SAFE
更改为与 io_context
默认构造函数保持一致。
- 修复了
BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO
的文档,以反映注册锁定仍处于启用状态。
- 为可选依赖项添加了单独的b2andcmake构建目标。
- 向
boost::asio::detail::throw_exception
添加了 [[noreturn]]
属性。
- 修复了
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
操作,可用于自旋循环中的回退措施。在 thread_pause
中增加了对 PowerPC 的支持,并改进了对 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 assign。
- 修复了内部异常。
- 添加了 IO 库。Cobalt.io 提供了一个大型的 asio 子集作为编译后的库。
-
Compat:
- 添加了
move_only_function.hpp
。
-
ContainerHash:
- 添加了
hash_is_avalanching
特性类。
-
Conversion:
- 增加了在 constexpr 中使用
polymorphic_downcast
和 polymorphic_cast
的能力(需要 C++20)。
-
Core:
- 修复了
bit_ceil
根据规范返回 1(对于输入 0)。(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)
- 由于 C++26 中
is_trivial
已弃用,因此在 iterator_facade
中移除了 is_trivial
的使用。(#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)。
- 修复了由于缺少包含文件而导致的 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 负责本次发布。