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<> 实现,以通过当前完成处理程序传播来自等待的初始化函数的异常。
    • 修复了 std::aligned_alloc 与以下内容的检测gcc 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 添加了组合操作和协程示例。
    • 有关更多详细信息,请参阅修订历史
  • Atomic:
    • 提高了 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 后备实现过去会跳过文件系统类型检查,并且可能在某些文件系统上失败。
    • 在支持 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: 添加了标准 Hough 变换和圆形栅格化 (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(),它提供相同的功能。
      • 重大变更: apply_operation for any_image 已弃用,将在下一个版本中删除。请改用 variant2::visit,它提供相同的功能。 (PR#656)
      • 将数字扩展移动到核心 (PR#573)
      • 添加了对 C++17 的 <filesystem> 的支持 (PR#636) std::filesystem 的可用性是自动检测的,除非定义了 BOOST_GIL_IO_USE_BOOST_FILESYSTEM 宏,该宏强制首选 Boost.Filesystem。
      • pixel_multiply_t 重命名为 pixel_multiplies_t,将 pixel_divide_t 重命名为 pixel_divides_t (PR#655)
      • io/dynamic_io_new.hpp 重命名为 io/detail/dynamic.hpp (PR#653)
      • 将函数 construct_matched 移动到 boost::gil::detail 命名空间,因为它仅被其他实现细节使用 (PR#653)
      • 使 packed_pixel 成为可平凡复制和可赋值的 (PR#679)
      • 用 C99 固定大小整数替换已弃用的 libtiff v4.3 typedef (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_t (PR#526)
      • 修复了 I/O 扩展中与 C++20 的不兼容性 (PR#617)
      • 确保所有示例都无错误构建 (PR#628)
      • 修复了具有 float32_t 通道模型的图像的 convolve_2d (PR#577)
      • 修复了非 1d 可迭代视图的 for_each_pixel (PR#621)
      • 已修复: PNG I/O 中的 is_equal_to_sixteen 是小于测试 (PR#650)
      • 重新允许具有两个组件的 devicen_t (PR#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
  • Graph:
    • Bug 修复
      • 修复了 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
  • Histogram:
    • 修复了在某些条件下尝试迭代具有零大小轴(物理或逻辑)的直方图时,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
  • Iterator:
    • 对于 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
    • 修复了书呆子式警告
  • Locale:
    • 已弃用对 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 的兼容性
    • 修复了由于缺少包含文件而导致的构建失败
    • 处理或抑制了许多警告,使构建日志更简洁
  • Log:
    • Bug 修复
      • 修复了当 IPv6 地址用于 syslog 服务器时,基于 UDP 套接字的 syslog_backend 中绑定不正确的本地地址的问题。 (#181)
      • 为 gcc 11.2 中的 libstdc++ 中的 bug 添加了解决方法。当在格式化流上使用 max_size_decor 时,std::codecvt::do_length 错误地访问了输入缓冲区并导致缓冲区溢出。
    • 有关更多详细信息,请参阅更新日志
  • Math:
    • 已弃用 C++11 支持: 从 2023 年起,我们将要求 C++14 作为最低标准。这将意味着 GCC-5 或 MSVC-14.1 作为最低要求。
    • 添加 constexpr fma 支持,请参阅 734
    • 添加了对 Chatterjee 相关系数的支持,请参阅 770
    • 为所有分布的 PDF 的对数添加了支持。
    • 改进了在没有异常或 RTTI 支持的情况下构建的支持。
    • 一些 [sub 1]F[sub 1] 极端情况的次要错误修复,请参阅 778
  • Multiprecision:
    • 将 C++11 支持标记为已弃用: 从 2023 年起,我们将转向要求 C++14 作为最低标准级别。这将放弃对 GCC 5 之前版本和 MSVC 14.1 之前版本的支持。
    • 修复了 boost/cstdfloat.hpp 和此库之间的冲突。
    • 清理了许多 gcc 和 clang 警告。
    • 修复了复合类型(复数、区间有理数)的输入流,其中流中存在尾部分隔符且没有空格。
    • 修复了输入为 1、2 或 3 的 constexpr 整数平方根。
    • 为 float128.hpp 添加了缺少的 #include <memory>
    • 更正了类 number 的 2 参数构造函数,以防止在某些情况下出现歧义。
    • 更正并使 gmp.hpp 中被零除的行为更加一致。
  • Multi-index Containers:
    • 维护工作。
  • Nowide:
    • 批量文件 I/O 的主要性能改进
    • basic_filebuf: 修复了 fflush 失败时 sync 的错误返回值
    • basic_filebuf: 修复了在实际未写入任何内容但缓冲区处于“写入”模式下的极端情况下可能出现的未定义行为
    • basic_filebuf: 限制字符的放回 (即 pbackfail) 仅允许放回缓冲的字符(可能只有一个字符)
  • Optional:
    • std::hash<boost::optional<T>> 添加了特化。对于定义此类特化本身的程序来说,这是一个破坏性变更。有关更多详细信息,请参阅 规范
  • STLInterfaces:
    • 修复 #53: "'typename' 缺失在 dependent type name 'C::const_iterator' 之前"
    • 修复 #54: "概念检查在 contiguous iterator_interface 实例化的视图的 .data() 上失败"
    • 新添加内容,使编写视图和视图适配器变得容易,这些视图和视图适配器的工作方式类似于标准库中的视图和视图适配器,并与之互操作
      • 为 C++23 的 std::bind_back()std::range_adaptor_closure 添加了适用于 C++23 之前代码的类似物。
      • 添加了模板 closureadaptor,以按照 P2387 中的示例,使编写视图适配器更容易。
  • System:
    • error_code 转换为 std::error_code 然后转换回 error_code 时,如果可能,现在会恢复原始的 error_code
    • 重做了从 error_categorystd::error_category 的转换,以避免在泄漏检查器上显示的一次性分配。
    • 添加了一个允许替换 error_code 的源位置的构造函数,以及相应的 assign
    • result 添加了一个转换构造函数。
  • Unordered: 主要更新
    • 重构内部实现以显着加快速度
    • 允许 final HasherKeyEqual 对象
    • 更新文档,添加基准图和关于新内部数据结构的注释
  • Utility:
    • 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: 修复的 Bug
    • #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 管理了此版本。