Boost C++ 库

...世界上最受尊敬和专家设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

版本 1.86.0

版本 1.86.0

2024年8月14日 16:07 GMT

文档

下载
平台文件SHA256 哈希值
Unixboost_1_86_0.tar.bz21bed88e40401b2cb7a1f76d4bab499e352fa4d0c5f31c0dbae64e24d34d7513b
boost_1_86_0.tar.gz2575e74ffc3ef1cd0babac2c1ee8bdb5782a0ee672b1912da40e5b4b591ca01f
Windowsboost_1_86_0.7z413ee9d5754d0ac5994a3bf70c3b5606b10f33824fdd56cf04d425f2fc6bb8ce
boost_1_86_0.zipcd20a5694e753683e1dc2ee10e2d1bb11704e65893ebcc6ced234ba68e5d8646
* 下载链接由 C++ 联盟 的资助支持。

新增库

  • 无新增库。

更新库

  • Asio:
    • default_completion_token 特征的主要模板更改为选择 deferred 作为默认完成令牌。因此,大多数异步操作的启动函数将默认返回一个延迟的异步操作。
    • 添加了 is_completion_condition 特征,并为 async_readasync_read_atasync_writeasync_write_at 的重载添加了缺失的默认完成令牌。
    • 添加了 is_connect_condition 特征,并在完成令牌默认为默认值时使用它来消除 async_connect 重载的歧义。
    • 扩展了完成令牌适配器 as_tuplebind_allocatorbind_cancellation_slotbind_executorbind_immediate_executorredirect_error,允许它们用作部分完成令牌适配器。
    • 添加了 cancel_aftercancel_at 完成令牌适配器。
    • 更改了所有完成令牌适配器,以确保它们在适配过程中正确传播异步操作的 I/O 执行器。
    • co_composed 移出 experimental 命名空间。
    • 添加了 composed,它从有状态实现创建一个启动函数对象。它类似于 co_composed,但用于常规函数对象而不是 C++20 协程。
    • 更改了 detached 完成令牌,使其可以与具有多个完成签名的异步操作一起使用。
    • 更改了 async_initiate 以允许空的变长完成签名列表,这表示异步操作永远不会完成。
    • 添加了 async_initiate 的重载,它们会自动推断完成令牌的类型。
    • 添加了 async_immediate,它实现了一个立即完成的简单异步操作,如果可用,将使用关联的立即执行器。
    • 启用了基于 SFINAE 的 associator 特征的部分特化。
    • 一些错误修复、编译器/平台兼容性改进和少量优化。
    • 文档和示例的各种更新。
    • 有关更多详细信息,请参阅修订历史记录
  • Atomic:
    • 在 OpenBSD 上使用 futex(2) 系统调用,因为最近的 OpenBSD 版本已移除对 syscall(2) 的支持。
  • Beast:
    • API 更改
      • 添加了 HTTP 状态代码 418 我是一个茶壶
    • 修复
      • read_size_hint_db() 中的窄化转换。
      • 使用默认完成令牌时不明确的重载。
      • http::basic_fields 移动赋值运算符中 misplaced 的 static_assert。
      • WebSocket 部分写入操作中 bytes_transferred 的下溢。
      • websocket::stream::read_size_hint() 不超过 read_message_max
      • 测试中的各种警告。
      • 示例中 SSL 关闭操作中的错误处理。
      • 注释 zlib 中的 fallthrough case。
      • basic_stream::ops::transfer_op 中过期计时器的处理。
      • test::basic_stream 构造函数重载中的歧义。
      • http::parser 中最后一个块的部分解析。
    • 改进
      • server_flex_awaitable 示例中的正常关闭。
      • 简化的 awaitable 示例。
      • 添加了模糊测试目标。
      • 在某些示例中删除了对 std::bind 的多余使用。
      • ssl_stream 不使用 flat_stream
    • 文档
      • ssl_streamflat_stream 标记为已弃用。
      • net::ssl::stream 在代码片段和示例中是规范的。
      • 添加了“SSL/TLS 关闭程序”部分。
    • 致谢
      • tyler92、Ruslan Zakirov、Orgad Shaneh、Alexander Kernozhitsky
  • Charconv:
    • 修复了对 PPC64LE 架构的支持。
    • 修复了对提供 <quadmath.h> 头文件但不提供已编译库的平台(如 Alpine Linux)的支持。
    • 修复了整数类型 from_chars 中的首字符模式匹配。
    • 修复了基数大于 10 的整数的溢出检测。
    • 添加了对 std::float16_tstd::bfloat16_t 的原生支持,而不是使用交换格式。
  • Cobalt:
    • 添加了对 asio::cancel_after 的支持
    • 使 asio::deferred 可 co_await,因为它是 asio 的默认令牌
    • 添加了 noop 实用程序
    • 添加了对有栈协程/纤程的实验性支持
    • 修复了 channel & 协程类型的可移动性
  • Compat:
    • 添加了 bind_front.hppbind_back.hppinvoke.hppmem_fn.hppinteger_sequence.hpptype_traits.hpp
    • 添加了` function_ref.hpp``.
  • Core:
    • 添加了 boost/core/pointer_in_range.hpp 头文件,其中包含 pointer_in_range 函数模板,用于检查指针是否在给定范围内 (Glen Fernandes)。
    • 修复了抽象类的 type_name。 (#172)
    • 修复了在禁用原生 wchar_t 类型的 MSVC 下 boost/core/type_name.hpp 编译错误。 (#173)
    • 添加了针对 MSVC 错误 的解决方法,该错误导致在将 empty_value 与嵌套类一起使用时出现编译错误。 (PR#175)
  • CRC:
    • 不再支持 C++03;需要 C++11 编译器。(这包括 GCC 4.6 或更高版本,以及 MSVC 10.0 (VS 2010) 或更高版本。)
    • 删除了对 Array、Config、Integer 和 TypeTraits 的依赖。该库现在是独立的。
  • Filesystem:
    • is_empty 操作现在可以更好地防止并发文件系统修改。
    • 在 POSIX 系统上,如果对除常规文件或目录以外的文件调用 is_empty,现在会指示错误。
    • 在 Windows 上,修复了 `file_size` 和 `is_empty` 对符号链接(symlinks)而非符号链接所指向的文件进行操作的问题。(#313)
    • `directory_entry::refresh` 如果条目引用的文件不存在,则不再抛出异常。这使得 `directory_entry::status` 和 `directory_entry::symlink_status` 以及基于它们的方法的行为与等效的独立操作类似。文件不存在的事实仍然通过相应的 `directory_entry::refresh` 重载返回的 `error_code` 指示,或者可以通过测试 `directory_entry::status` 或 `directory_entry::symlink_status` 调用返回的文件类型是否为 `file_type::file_not_found` 来查看。(#314)
    • 修复了 `weakly_canonical` 在输入路径是相对路径时,相对于当前路径而不是调用中指定的基本路径测试路径元素是否存在的问题。
    • 在 Windows 上,修复了当输入路径以“..”开头时,`weakly_canonical` 产生不正确的结果路径的问题。(#311)
  • 格式:
    • 不再支持 C++03;需要 C++11 编译器。(这包括 GCC 4.7 或更高版本,以及 MSVC 12.0 (VS 2013) 或更高版本。)
  • 函数:
    • 移除对 Boost.TypeTraits 的依赖。
    • 恢复了在 1.85 中意外丢失的 `argN_type` 类型定义。
  • GIL(通用图像库):
    • 新增
      • 向 `istream_device` 和 `ostream_device` 类添加了 `tell()` 和 `error()` 函数(PR#747)。
    • 变更
      • 在 `color_converted_view` 函数中不再忽略自定义颜色转换器(PR#726)。
      • 添加了针对 WinAPI 上与 `min()` 和 `max()` 宏冲突的解决方法(PR#745)。
      • 现在可以通过 CMake 中的选项 `BOOST_GIL_USE_BOOST_FILESYSTEM` 配置 GIL 中 `boost::filesystem` 的使用(PR#743)。
    • 修复
      • 修复了 `convolve_2d` 中的卷积问题(PR#723)
      • 对高斯二维核进行归一化以避免变暗(PR#725)
      • 修复了 `std::wstring` 路径字符串转换函数中的错误缓冲区大小问题,避免了在将 I/O 相关函数与 `std::wstring` 路径一起使用时出现缓冲区溢出(PR#746)。
    • 致谢
      • Christoph Gringmuth, Christopher Kormanyos, nicolacandussi, Dirk Stolle, Olzhas Zhumabek
  • Graph(图):
    • **主要**更新:C++14 是新的最低标准;这部分是由依赖关系(至少是 C++11)决定的,部分是选择的结果。如果您需要支持旧标准,请联系维护人员。
    • 移除对 Boost.Regex 的直接依赖。
    • 修复了几个由于未显式包含公共头文件而导致的编译错误。
    • `isomorphism`:修复文档,忽略 `vertex_max_invariant` 参数,改为廉价地计算上限(不包含),修复了关联属性映射的错误,将空间效率从最大不变量大小的线性提高到 g1 大小的线性。
    • `boykov_kolmogorov_max_flow`:修复命名参数重载。
    • `adj_list_edge_iterator`:修复可能未初始化的警告。
    • `hawick_circuits`:添加一个参数以选择性地限制搜索深度,从而导致尽早返回潜在的次优答案。
    • `disjoint_sets`:通过删除冗余的集合代表查找来提高 `link_sets` 的性能。
    • `maximum_adjacency_search`:重构和更多测试。
    • `property`:使用 `BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS` 来消除浪费的空间。
    • `labeled_graph`:修复 `remove_labeled_vertex` 以便它实际也删除标签。
    • `r_c_shortest_paths`:修复单解变体并不总是返回最短路径的错误。
    • `read_graphviz`:修复堆栈溢出(oss-fuzz 问题 66719)和非关键字子图解析。
    • 许多其他改进:断开的链接、拼写错误等。
  • JSON:
    • 已弃用对低于 5.0 版本的 GCC 版本的支持,并**将在 Boost 1.88.0 中停止**。
    • 将 `source_location` 参数添加到抛出异常的访问器函数。
    • 解析选项以容忍无效的 UTF-16 代理对,并生成 WTF-8
    • 添加了返回 `system::result` 的访问器函数。
    • 处理直接解析中缺少错误的情况。
  • LexicalCast(词汇转换):
    • 修复了包含一个或多个 `\0` 字符的 `std::basic_string_view` 和 `boost::basic_string_view` 的转换问题。该问题是在 1.85.0 中引入的。
  • leaf:
    • 更优化的 verbose_diagnostic_info 实现。
    • 错误修复。
    • 将 [[nodiscard]] 添加到类 result<>。
  • Locale(本地化):
    • 在 `conv::utf_to_utf` 中添加对自定义分配器的支持
    • 默认情况下不构建示例
  • Log(日志):
    • 添加了针对 `windres.exe` 问题的解决方法,当它在 CMake 中用于在 MinGW-w64 上编译事件日志资源文件时。(PR#231)
  • Math(数学):
    • 修正无穷远处的贝塞尔函数结果,参见 1143
    • 提高非中心 T 的数值稳定性,参见 scipy20693
    • 修正无穷远处 `float_next`/`float_prior` 的行为。
    • 防止非中心 beta 中出现虚假下溢,参见 scipy20693
    • 改进 Heuman Lambda 精度。
    • 改进偏态正态分布的求根方法,参见 1120
    • 许多细微的修复和改进的代码覆盖率。
  • Multiprecision(多精度):
    • 确保 `eval_convert_to()` 不会因超大数字而终止,参见 618
    • 修复 `sinc` 实现以匹配 Boost.Math 的行为。
    • 修复 cpp_int 模运算中的除以零错误。
    • 修复大于 128 位的整数的下溢行为一致性,参见 626
  • MySQL:
    • 已删除长期弃用的函数 `query`、`start_query`、`execute_statement` 和 `start_statement_execution`(及其异步等效函数)。
    • 对实验性 API 的重大更改
      • 已删除 `identifier` 类(客户端 SQL 格式化)。请改用新的格式说明符功能。
      • 自定义格式化程序所需的接口已更改,以适应新的格式说明符 API。
      • `any_connection::async_connect` 现在要求在其操作完成之前保持其 `connect_params` 参数的活动状态。已删除采用 `const connect_params*` 的重载。
      • `character_set::name` 现在是 `const char*` 而不是 `string_view`,因为 MySQL 字符集名称不能包含 NULL 字符。
      • `any_connection` 内部缓冲区现在限制为 64MB。如果需要读取或写入大于该值的行,请增加 `any_connection_params::max_buffer_size`。`connection` 及其辅助类型定义不受限制。
      • 将 `any_connection_params::initial_read_buffer_size` 重命名为 `initial_buffer_size`。
      • 将 `pool_params::initial_read_buffer_size` 重命名为 `initial_buffer_size`。
    • 新的实验性 API:**管道**。管道可以通过将多个请求合并到一个网络数据包中来提高效率。管道可用于运行文本查询、准备、执行和关闭语句、重置会话状态以及设置连接的字符集。
    • 客户端 SQL 格式化现在开箱即用地支持范围。可以使用新的 `sequence` 函数进一步自定义格式化。使用此功能可以大大简化批量插入和批量查找等用例。
    • 客户端 SQL 格式化现在支持格式说明符,这些说明符可以修改值的格式化方式。`{:i}` 将字符串格式化为动态 SQL 标识符,`{:r}` 输出原始未转义的
    • 静态接口(`static_results` 和 `static_execution_state`)现在使用 `pfr_by_name` 和 `pfr_by_position` 支持 Boost.Pfr 类型。添加了 `underlying_row_t` 以支持此类类型。
    • `date` 和 `datetime` 现在可以从 C++20 `std::chrono::local_time` 构造,也可以转换为 C++20 `std::chrono::local_time`。
    • 添加了 `any_connection_params::max_buffer_size`,它允许设置连接内部缓冲区的限制。
    • 添加了 `is_fatal_error`,它允许用户现在可以区分致命错误(需要关闭并重新打开连接)和非致命错误代码。
    • 添加了 `formattable_ref`,这是一种类型擦除的引用类型,可以引用任何满足 `Formattable` 概念的类型。
    • 修复了 MSVC 下的 ODR 冲突,当在不同的翻译单元中将 Boost.MySQL 与其他也使用 `asio::coroutine` 的代码一起使用时,该冲突可能会导致发布版本崩溃。
  • Odeint(常微分方程积分器):
    • 添加了 CMake 选项 `BOOST_NUMERIC_ODEINT_NO_ADAPTORS` 以减少依赖关系,参见 82
    • 修复了 CMake 对 MPI 的检测。
  • Process(进程):
    • 将旧的 boost.process 移动到 v1 子文件夹和内联命名空间。弃用 process/*.hpp v1 头文件
    • 将 v2 变为编译库。
    • 修复了在 alpine linux / musl 上的使用问题
  • 堆栈跟踪:
    • 重大新功能:Windows 上任意异常的堆栈跟踪std::stacktrace::from_current_exception() 现在可以在 Windows 平台上运行。非常感谢 huangqinjin 的实现 PR#159。现在在 POSIX 和 Windows 上,from_current_exception() 函数返回当前异常对象的堆栈跟踪,如同在抛出异常时捕获堆栈跟踪一样。
    • 修复了包含很少使用的 Windows SDK 头文件的问题,这些头文件可能与其他使用 Windows SDK 的代码冲突。感谢 Marat Abrarov 修复了这个问题 PR#157
    • 构建选项 boost.stacktrace.from_exception 现在可以在 MacOS 上正常工作。感谢 Peter Dimov 的修复 PR#166
    • 修复了断言表达式中的一个拼写错误。感谢 Kilian Henneberger 的错误报告 #164
    • 修复了变量遮蔽警告。感谢 Nigel Stewart 的错误报告 #141
    • 为 AIX 添加了 dladdr 最小支持。非常感谢 Clément Chigot 的实现 PR#114
    • 添加了 Boost::stacktrace CMake 别名,它指的是平台上支持最佳的 Boost.Stacktrace 实现。感谢 Alex 的功能 PR#167
    • CMake 的重大改进:多个修复,添加了许多新测试,改进了 CI。非常感谢 Peter Dimov 的所有改进。
    • 修复了通过 PATH 查找进程时 addr2line 的工作问题。感谢 Schreischildkroete 的错误报告和 Jens Richter 的修复 #72
  • 测试:
    • 修复配置步骤中的 -Wundef 问题。
    • 修复了 MSVC 上无法到达的返回编译错误。
  • 无序:
    • 当头文件 <memory_resource> 可用时,添加了容器 pmr 别名。别名 boost::unordered::pmr::[container] 指的是具有 std::pmr::polymorphic_allocator 分配器类型的 boost::unordered::[container]
    • 开放地址和并发容器现在可以内部计算并提供受哈希函数质量影响的统计指标。此功能由全局宏 BOOST_UNORDERED_ENABLE_STATS 启用。
    • 雪崩哈希函数现在必须通过带有嵌入式 `value` 常量设置为 `true` 的 `is_avalanching` typedef 进行标记(通常,将 `is_avalanching` 定义为 `std::true_type`)。`using is_avalanching = void` 已弃用,但为了向后兼容性仍然允许使用。
    • 为容器和迭代器添加了 Visual Studio Natvis 框架自定义可视化。这适用于所有使用原始指针的分配器的容器。在此版本中,如果容器和迭代器的分配器使用 fancy 指针,则不支持它们。这可能会在以后的版本中得到解决。
  • UUID:
    • 主要更新。
    • 不再支持 C++03,需要 C++11 编译器。(这包括 GCC 4.8 或更高版本、MSVC 14.0 (VS 2015) 或更高版本,以及 MinGW-w64。)
    • Boost 依赖项的数量从 39 个(总共)减少到只有 5 个。
    • 已更新以反映较新的 RFC 9562
    • 添加了基于时间的 UUID 生成器。
    • 许多其他改进,请参阅修订历史记录
  • Wave:
    • 将 vsprintf 的一次使用替换为更安全的 vsnprintf
    • 修复了错误
      • #197:不正确的有符号溢出处理(未定义行为和缺少除法检查)
  • WinAPI:
    • 添加了 BOOST_USE_WINAPI_VERSION CMake 选项,允许用户指定 Boost 要针对的 Windows 版本。

更新的工具

  • BoostBook:
    • DTD 更新:constructorcopy-assignmentdestructor 元素现在允许在 method-group 元素内使用。
    • Doxygen 生成的文档中的许多修复和改进
      • 修复了 Doxygen 生成的枚举值初始化器中重复的等号。
      • 禁用了函数参数的字母顺序排序。可以通过将新的 boost.sort.params XSL 参数设置为 1 来重新启用排序。
      • 添加了对自定义类成员分组的支持。请参阅 Doxygen 标签 @name@{/@}
      • 添加了对 Doxygen 引用类、方法、枚举、变量等的支持(请参阅 @ref 标签)。
      • 添加了对 @remark@important 标签的支持。
      • 添加了对 @parblock 标签的支持,该标签可用于在预期单段作为参数的标签(例如 @returns)下放置多段。
      • 引用实现细节的模板参数默认值现在被隐藏,类似于函数参数默认值。
      • 改进了未命名枚举的表示。不再显示合成的名称(如 @0),而是省略名称或使用 [unnamed](如果名称对于引入指向枚举文档的链接是必需的)。
      • 将“另请参阅”(@sa)块更改为以内联方式显示,类似于“返回”。
      • 修复了多个异常规范(@throws)的表示。
      • 添加了对自由格式描述抛出行为的支持。如果 @throws 标签后的异常类型为“~”,则从输出中省略异常类型,并在“Throws”部分直接显示以下描述。
      • 删除了返回类型和模板参数中的冗余空格。
  • 构建:

测试的编译器

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 管理了此版本。