Boost C++ 库

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

版本 1.80.0

版本 1.80.0

2022年8月10日 21:25 GMT

文档

下载
平台文件SHA256 哈希值
Unixboost_1_80_0.tar.bz21e19565d82e43bc59209a168f5ac899d3ba471d55c7610c677d4ccf2c9c500c0
boost_1_80_0.tar.gz4b2136f98bdd1f5857f1c3dea9ac2018effe65286cf251534b6ae20cc45e1847
Windowsboost_1_80_0.7zd12a2af721e22dbfb984ef061ee4c4ab2387f1904f6d65bc5acebaa34d6366ec
boost_1_80_0.zipe34756f63abe8ac34b35352743f17d061fcc825969a2dd8458264edb38781782
* 下载链接由 C++ 联盟 的资助提供。

已知问题

这些是库作者提供的补丁,在发布时发现为时已晚,无法修复。

  • 配置
    • 支持 libcpp15,它移除了 std::unary_functionstd::binary_function补丁
  • 文件系统
    • 在 Windows 10 之前的版本中,目录迭代器可能无法构造网络共享,请参阅 PR#246#245补丁
    • 在 Windows 上,weakly_canonical 无法处理以 "\\?\" 前缀开头的路径,请参阅 #247补丁
    • 在不支持 *at API 的 POSIX 系统上,由于缺少包含文件,编译将失败,请参阅 #250补丁
  • 无序
    • 移动后容器处于无效状态,请参阅 #139补丁
    • 修复 MSVC /RTCc 构建运行时失败。 补丁

新增库

  • 没有新的库。

更新库

  • Asio:
    • 为所有异步操作添加了推导的尾随返回类型,以启用 C++11 的新形式 async_result
    • appendprependas_tupledeferred 移至 boost::asio 命名空间,并使其与 C++11 兼容。
    • 使 experimental::parallel_group 与 C++11 兼容。
    • 为连续容器(例如 std::span)添加了 buffer() 重载。
    • 添加了基于 awaitable<> 的协程直接 co_await 打包为函数对象的操作的能力。
    • spawn() 更改为基于完成令牌的异步操作,并添加了对取消的支持。 basic_yield_context 令牌现在支持仅移动和可变参数的结果类型。 当目标为 C++11 及更高版本时,spawn()basic_yield_context 直接根据 Boost.Context 实现。
    • 添加了 is_async_operation 特征和 async_operation 概念。
    • 添加了 completion_signature_of 特征。
    • 添加了将移动构造/赋值转换为 posix 描述符、串行端口、管道、Windows object_handle、Windows 流句柄和 Windows 随机访问句柄。
    • 向管道、Windows 流句柄和 Windows 随机访问句柄添加了 release() 成员函数。
    • 启用了对 Endpoint 实现的支持,这些实现从其 data() 成员函数返回 void 指针,根据记录的 Endpoint 类型要求。
    • experimental::promise 中删除了 all()race(),因为 experimental::parallel_group 涵盖了此功能。
    • 向同步和异步操作产生的异常和错误代码添加了源位置。
    • 修复了与 OpenSSL 3.0.4 及更高版本的兼容性。
    • 修复了与-masm=intel 的兼容性.
    • 明确声明套接字 shutdown() 调用相对于同一套接字上的某些其他同步操作是线程安全的。
    • 优化了仅执行器类型不同的 I/O 对象的移动构造。
    • 修复了 clang/libc++ 的 std::invoke_result 检测问题。
    • 修复了 experimental::parallel_group 初始化错误地移动参数而不是转发参数的问题。
    • 修复了 post()dispatch()defer() 实现中的排序问题。
    • 修复了 awaitable<> 实现,以通过当前完成处理程序传播来自等待的初始化函数的异常。
    • 修复了使用gcc 检测 std::aligned_alloc 的问题 7.
    • 更改为避免在新编译器上使用即将弃用的 std::aligned_storage
    • 修复了旧 Apple 平台上 std::aligned_alloc 的检测问题。
    • experimental::coro 实现中删除了错误的断言。
    • 使用 Intel C++ 构建时,添加了针对 Qt 定义的宏的防御措施。
    • 更改了 Windows 上 select_reactor 的实现,以确保允许因无法重新创建其中断器的套接字而导致的任何异常通过 io_context::run() 传播出去。
    • 修复了各种编译器警告。
    • 更新了所有组合操作示例以及 C++11 超时示例,以使用新的 async_result 形式。
    • 为 C++20 添加了组合操作和协程示例。
    • 有关更多详细信息,请参阅修订历史记录
  • 原子:
    • 改进了 ARM、AArch32 和 AArch64 目标上的字节序检查的可移植性。(#59)
    • 修复了在 C++17 模式下使用 MSVC 14.0(Visual Studio 2015)进行编译的问题。(#61)
  • 文件系统:
    • 在 Windows 上,添加了在文件无法以 ERROR_ACCESS_DENIED 错误打开的情况下查询文件属性的回退实现。这可能允许 statussymlink_status 对不是重解析点或符号链接的系统文件和目录成功。(#234)
    • 在 Windows 上,添加了针对 FAT/exFAT 文件系统在查询文件属性时产生 ERROR_INVALID_PARAMETER 的解决方法。这会影响 statussymlink_status,它们报告文件不存在,目录迭代器无法构造,以及其他依赖操作。(#236, #237)
    • 解决了 RTEMS 上的编译问题。(PR#240)
    • 在 Linux 上,如果 copy_file_range 在运行时因 ENOSYS 失败,则更正切换到 sendfile copy_file 实现。 sendfile 回退实现 used to skip the filesystem type check and could fail for some filesystems.
    • 在支持 POSIX.1-2008 中定义的 openat 和相关 API 的 POSIX 系统以及 Windows Vista 及更高版本上,改进了针对先前版本中实现的 CVE-2022-21658remove_all 保护。先前的修复程序在某些情况下仍可能导致删除不需要的文件。其他系统仍然容易受到攻击。
  • GIL: **注意:** 我们计划在 Boost 1.80 之后的一两个版本中将 C++17 作为最低要求的 C++ 语言版本进行**重大更改** (#676)
    • 新增
      • GSoC 2020: 添加了 Perona-Malik 各向异性扩散算法 (PR#500)
      • GSoC 2020: 添加了直方图类和相关功能 (PR#499)
      • GSoC 2020: 添加了直方图均衡功能 (PR#514)
      • GSoC 2020: 添加了直方图匹配算法 (PR#515)
      • GSoC 2020: 添加了水平 (hstack) 或垂直 (vstack) 堆叠图像的功能 (PR#506)
      • GSoC 2020: 添加了自适应直方图均衡算法 (PR#516)
      • GSoC 2020: 添加了标准霍夫变换和圆形光栅化 (PR#512)
      • GSoC 2020: 添加了 Bresenham 的线栅格化算法 (PR#512)
      • GSoC 2021: 添加了图像绕其中心任意角度旋转的功能 (PR#565)
      • GSoC 2021: 基于 Jerry Van Aken 的“一种高效的椭圆绘制算法”添加了对椭圆的光栅化支持 (PR#585)
      • 添加了从兼容视图构造 image 的构造函数 (PR#520)
      • 为仿射 matrix3x2 添加了逆函数 (PR#527)
      • 添加了标准形态变换 (PR#541)
      • any_image 添加了 for_each_pixel 重载 (PR#648)
      • image 类添加了 C++17 多态内存资源 typedef (PR#529)
    • 更改
      • **重大更改:** 所需的最低 C++ 版本从 C++11 更改为 C++14。目前,GIL 的大部分仍然可以使用 C++11 编译器进行编译。但是,不能保证它会保持这种状态,并且任何不支持至少 C++14 的编译器现在都被视为不受支持。
      • **重大更改:** any_color_converted_view() 已弃用,并将在下一个版本中删除。请改用提供相同功能的 color_converted_view()
      • **重大更改:** any_imageapply_operation 已弃用,并将在下一个版本中删除。请改用提供相同功能的 variant2::visit。(PR#656)
      • 将数字扩展移至核心 (PR#573)
      • 添加了对 C++17 的 <filesystem> 的支持 (PR#636) 将自动检测 std::filesystem 的可用性,除非定义了强制优先使用 Boost.Filesystem 的 BOOST_GIL_IO_USE_BOOST_FILESYSTEM 宏。
      • pixel_multiply_t 重命名为 pixel_multiplies_t,并将 pixel_divide_t 重命名为 pixel_divides_tPR#655
      • io/dynamic_io_new.hpp 重命名为 io/detail/dynamic.hppPR#653
      • 将函数 construct_matched 移至 boost::gil::detail 命名空间,因为它仅被其他实现细节使用(PR#653
      • 使 packed_pixel 可平凡复制和赋值(PR#679
      • 将已弃用的 libtiff v4.3 类型定义替换为 C99 固定大小整数(PR#685
    • 移除
      • **重大变更:** 移除对 GCC 5 的支持(PR#572
      • 移除 deprecated.hpp(PR#627
    • 修复
      • 修复从 RGB 到 HSL 的转换(PR#505
      • 修复从 RGB 到带符号 CMYK 的转换(PR#522
      • 移除 hsv.hpp 中不必要的数值转换(PR#530
      • 修复引用像素元素的 homogeneous_color_base 的默认构造函数(PR#542
      • 修复 subchroma_image_view 中返回对局部临时对象的引用问题(PR#556
      • 在 diffusion.hpp 中添加缺少的头文件保护(PR#568
      • 修复 any_image_view<>::const_tPR#526
      • 修复 I/O 扩展中的 C++20 不兼容性(PR#617
      • 确保所有示例均可无错误构建(PR#628
      • 修复通道模型为 float32_t 的图像的 convolve_2d 问题(PR#577
      • 修复非一维可迭代视图的 for_each_pixel 问题(PR#621
      • 修复:PNG I/O 中的 is_equal_to_sixteen 是小于测试(PR#650
      • 重新允许具有两个组件的 devicen_tPR#654)它在 Boost 1.72 中被无意删除
      • 修复空维度 image 类中的内存泄漏(PR#649
    • 致谢
      • Cypre55, Samuel Debionne, Mike-Devel, Edward Diener, Peter Dimov, Omar Emara, Dhruva Gole, Nicolas Herry, Eugene K, Avinal Kumar, Gaurav Kumar, Marco Langer, Pranam Lashkari, Mateusz Łoskot, Giovanni Mascellani, Debabrata Mandal, Gopi Krishna Menon, René Ferdinand Rivera Morell, Felix Morgner, Harshit Pant, Paul92, André Schröder, Scramjet911, Siddharth, Dirk Stolle, Prathamesh Tagore, theroyn, Olzhas Zhumabek
  • 图表:
    • 错误修复
      • 修复 stoer_wagner_min_cut 中在每个最小割阶段结束时未合并顶点的错误(#286
      • 修复 strong_components 返回类型的转换警告(#293
      • 修复 boykov_kolmogorov_max_flow 命名参数重载的编译失败(#232
    • 通用代码改进
      • 移除 astar_search_no_init_tree 中对 combine 的冗余调用(#260
      • 移除 d_ary_heap_indirect<>::child 的冗余参数 child_idx#261
      • 改进遍历类别的文档(#303
    • 致谢
      • Viktor Pti, Sebastian Brockmeyer, Etienne dg
  • 直方图:
    • 修复了在某些情况下尝试迭代零大小(物理或逻辑)轴的直方图时,indexed 中的段错误
    • 移除之前已弃用的 API
      • accumulators::thread_safe:使用 accumulators::count<T, true>
      • 方法 accumulators::sum::largeaccumulators::sum::small:使用 accumulators::sum::large_partaccumulators::sum::small_part
      • 类型别名 algorithm::reduce_option:使用 algorithm::reduce_command
      • 模板函数 axis::traits::static_options:使用 axis::traits::get_options
      • 模板函数 axis::traits::static_is_inclusive:使用 axis::traits::is_inclusive
      • 类型别名 indexed::range_iterator:使用 indexed::iterator
      • 类型别名 indexed::accessor::reference:使用 indexed::accessor::const_reference
  • 迭代器:
    • 对于 C++11 及更高版本,添加了对写入 function_output_iterator 的值的完美转发支持。(PR#73
    • 添加了防止将解引用另一个 function_output_iterator 的结果写入 function_output_iterator 的保护措施。
  • JSON:
    • 添加了非常量 value::at 重载。
    • 添加了手动选择平台字节序的功能。
    • 添加了 string::subview() 重载。
    • 修复了 array::erase(it) 中的段错误。
    • 修复了 libc++ 上 serialize 的低性能问题。
    • 修复了 GCC 8 上转换为 std::string_view 的歧义。
    • 修复了大端平台上的解析问题。
    • 修复了处理尾随逗号后的注释的问题。
  • LEAF:
    • API 重大变更:throw leaf::exception(....) 现在变为 leaf::throw_exception(....)
    • 修复了对罕见构建配置(启用异常处理,禁用诊断)的支持中的错误
    • 始终使用 nullptr 代替 0
    • 修复了警告
  • 区域设置:
    • 弃用对 C++03 及更早版本的支持,下一个版本将需要 C++11
    • 提供 -sICU_LINK_LOCALE 作为 -sICU_LINK 的临时替代品,后者与 Boost.Regex 不兼容。 -sICU_LINK_LOCALE-sICU_LINK 已弃用,将被 ICU_*_NAME 选项替代,以与 Boost.Regex 兼容
    • 修复转换空字符串时 ICU collator 实现中的 UB/断言失败
    • 修复一些与共享库中类的可见性相关的问题(仅限 Unix)
    • 修复与 C++20 模式的兼容性
    • 修复与 BOOST_USE_WINDOWS_H 的兼容性
    • 修复由于缺少包含文件导致的构建失败
    • 处理或抑制许多警告,使构建日志更清晰
  • 日志:
    • 错误修复
      • 修复了当 IPv6 地址用于 syslog 服务器时,在基于 UDP 套接字的 syslog_backend 中绑定不正确的本地地址的问题。(#181
      • 添加了针对 gcc 11.2 中 libstdc++ 的 错误 的解决方法。当在格式化流上使用 max_size_decor 时,std::codecvt::do_length 错误地访问了输入缓冲区并导致缓冲区溢出。
    • 有关更多详细信息,请参阅更改日志
  • 数学:
    • **已弃用 C++11 支持**:从 2023 年开始,我们将要求 C++14 作为最低标准。这意味着 GCC-5 或 MSVC-14.1 作为最低要求。
    • 添加 constexpr fma 支持,请参阅 734
    • 添加对 Chatterjee 相关系数的支持,请参阅 770
    • 添加了对所有分布的 PDF 对数的支持。
    • 改进对无异常或 RTTI 支持的构建支持。
    • 对 [sub 1]F[sub 1] 边界情况的一些小错误修复,请参阅 778
  • 多精度:
    • **将 C++11 支持标记为已弃用**:从 2023 年开始,我们将要求 C++14 作为最低标准级别。这将放弃对 5 之前的 GCC 版本和 14.1 之前的 MSVC 的支持。
    • 修复 boost/cstdfloat.hpp 与此库之间的冲突。
    • 清理大量 gcc 和 clang 警告。
    • 修复复合类型(复数、区间有理数)的输入流问题,其中流中存在尾随分隔符但没有空格。
    • 修复输入为 1、2 或 3 时的 constexpr 整数平方根。
    • 将缺少的 #include <memory> 添加到 float128.hpp。
    • 更正类 number 的双参数构造函数,以防止在某些情况下出现歧义。
    • 更正并在 gmp.hpp 中使除以零的行为更加一致。
  • 多索引容器:
    • 维护工作。
  • Nowide:
    • 文件批量 I/O 的主要性能改进
    • basic_filebuf:修复 fflush 失败时 sync 的错误返回值
    • basic_filebuf:修复在没有实际写入任何内容但缓冲区处于“写入”模式的极端情况下可能出现的未定义行为
    • basic_filebuf:限制字符的回退(即 pbackfail),仅允许回退缓冲字符(可能只有 1 个字符)
  • 可选:
    • 为`std::hash<boost::optional<T>>添加了特化。这对于自行定义此类特化的程序来说是一个破坏性更改。更多详情请参见规范
  • STL接口:
    • 修复 #53: "在依赖类型名称 'C::const_iterator' 之前缺少 'typename'"
    • 修复 #54: "概念检查在连续 iterator_interface 实例化的视图的 .data() 上失败"
    • 新增内容,可以轻松编写与标准库中的视图和视图适配器类似并可互操作的视图和视图适配器。
      • 为 C++23 之前的代码添加了类似于 C++23 的 std::bind_back()std::range_adaptor_closure 的功能。
      • 根据 P2387 中的示例,添加了模板 closureadaptor 以简化视图适配器的编写。
  • 系统:
    • error_code 转换为 std::error_code 然后再转换回 error_code 时,如果可能,现在将恢复原始值。
    • 重新设计了从 error_categorystd::error_category 的转换,以避免泄漏检查器中出现的一次性分配。
    • 添加了一个构造函数,允许替换 error_code 的源位置,以及相应的 assign 方法。
    • result 添加了转换构造函数。
  • 无序: 重大更新
    • 重构 内部实现以大幅提高速度
    • 允许 final HasherKeyEqual 对象
    • 更新文档,添加基准测试图表和有关新内部数据结构的说明
  • 实用程序:
    • string_view/string_ref 中,修复了 max_size 返回错误值的问题。(#91)
    • string_view::compare 中删除了 noexcept 说明符,因为它可能在某些输入参数上抛出异常。(#94)
    • string_view/string_ref 中,添加了对不带参数调用 substr 的支持。(#96)
    • 添加了 C++23 中引入的 string_view::contains 方法。(#93)
    • string_view 中,在 remove_prefix/remove_suffix 方法中添加了断言,以强制执行前缀/后缀长度不超过字符串视图大小的前提条件。先前(未记录)的静默钳位前缀/后缀长度的行为已被弃用,并将在以后的版本中删除。(#92)
  • Wave: 修复了错误
    • #24: 条件部分之后的行号错误
    • #160: 在 msvc /permissive- 模式下,一个测试因错误 C2660 和错误 C2440 而失败
    • #161: BOOST_WAVE_THROW_NAME_CTX 不会导致上下文回调并且总是抛出异常
    • #162: 当预处理的翻译单元中包含 Boost 头文件时,Wave 在 boost/integer.hpp(99) 中失败

更新的工具

测试的编译器

Boost 的主要测试编译器是

Boost 的主要测试编译器是

  • Linux
    • Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0
    • Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.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
    • 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
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0
    • GCC: 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: 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、Michael Caisse 和 Glen Fernandes 管理了此版本。