Boost C++ 库

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

版本 1.72.0

版本 1.72.0

2019年12月11日 18:06 GMT

文档

下载
平台文件SHA256 哈希值
Unixboost_1_72_0.tar.bz259c9b274bc451cf91a9ba1dd2c7fdcaf5d60b1b3aa83f2c9fa143417cc660722
boost_1_72_0.tar.gzc66e88d5786f2ca4dbebb14e06b566fb642a1a6947ad8cc9091f9f445134143f
Windowsboost_1_72_0.7z247a91dd7e4d9dd3c4b954b532fbc167ba62dc15ab834e5ad893d7c3f9eb5f0f
boost_1_72_0.zip8c20440aaba21dd963c0f7149517445f50c62ce4eb689df2b5544cc89e6e621e
* 下载链接由 C++ 联盟 的资助支持。

已知问题

这些是库作者提供的补丁,在发布时发现为时已晚,无法修复。请谨慎使用,因为它们没有经过正常的测试流程。

更新的库

  • Asio:
    • async_initiate 辅助函数更改为自动推断其返回类型,适用于 C++11 或更高版本。
    • 将所有异步操作更改为使用自动推断的返回类型,适用于 C++14 或更高版本。
    • 引入了 concept 来支持 async_initiate
    • 向所有 I/O 对象类型添加了嵌套模板类型 rebind_executor
    • 更改了 initiation 函数对象,以通过嵌套类型 executor_type 和成员函数 get_executor() 报告其关联的 I/O 执行器。
    • 添加了 default_completion_token trait,为 I/O 执行器类型提供了一个关联的默认 completion token 类型,用于异步操作。例如,此 trait 专用于 use_awaitable completion token,以允许异步操作按如下方式使用:co_await socket.async_connect(my_endpoint)
    • 将 Windows 特定的 I/O 对象的异步操作中缺少的 async_initiate 添加进去。
    • 确保将执行器类型传播到新接受的套接字。
    • 更改为要求 Protocol 复制和移动操作永不抛出异常。
    • 更改为要求 Endpoint 默认构造函数和移动操作永不抛出异常。
    • noexcept 限定符添加到协议访问器。
    • noexcept 限定符添加到套接字移动构造函数。
    • 修复了与在 Windows 上打开串行端口相关的问题
      • 使用正确的常量初始化 RTS 控制标志。
      • 指定默认波特率 (9600)。
    • 修复了异步接受操作自动重启时可能发生的“未完成工作计数”丢失问题。
    • 有关更多详细信息,请参阅修订历史记录
  • Atomic:
    • 添加了针对某些版本的 libstdc++ 不将 __float128 视为浮点类型的问题的解决方法。
    • 改进了与 clang-win 编译器的兼容性。
  • Beast:
    • 这是一个维护更新,包含错误修复和使用 Boost.Asio 中提供的新功能的更新。
    • 我们很想知道您或您的公司如何使用 Beast,请考虑在使用 Beast 的公司和个人列表中添加一个条目。
    • 有关更改的完整列表,请参阅完整的发行说明
  • 循环缓冲区:
    • 修复问题 #29max_size() 现在考虑分配器的 max_size()。(Glen Fernandes)
  • Context:
    • 支持 s390x 架构
    • 移除 execution_context
  • Endian:
    • 在 GCC 和 Clang 上使 endian_reverseconditional_reverse*_to_* 成为 constexpr
    • 添加了便捷的加载和存储函数
    • 添加了浮点便捷类型定义
    • 添加了 data() 的非 const 重载;将其返回类型更改为 unsigned char*
    • 在可用时,向 endian_reverse 添加了 __int128 支持
    • 添加了一个便捷的头文件 boost/endian.hpp
  • Filesystem:
    • filesystem_error 提取到 exception.hpp;将 file_status 以及相关的枚举和函数提取到 file_status.hpp;将 directory_entrydirectory_iteratorrecursive_directory_iterator 提取到 directory.hpp
    • **已弃用:** 为了向后兼容,` operations.hpp` 仍然包含新的头文件 ` exception.hpp`、` file_status.hpp` 和 ` directory.hpp`,除非定义了 ` BOOST_FILESYSTEM_NO_DEPRECATED` 宏。这些隐式包含被认为已弃用,并将在未来的版本中删除。鼓励用户直接包含新的头文件或包含 ` filesystem.hpp`。
    • filesystem_error 异常现在在 Boost.Filesystem 的已编译库中实现。用户可能需要在其项目中添加与 Boost.Filesystem 库的链接。
    • 在 POSIX.1-2008 平台上,使用 utimensat 代替 utimeutime 在 POSIX.1-2008 中声明为 obsolete,并且可以在例如 uClibc-ng 中禁用。(PR#115
    • directory_iterator 现在在内存分配错误时处于结束状态。
    • 在 POSIX 系统上的 directory_iterator 中,对 readdir/readdir_r 的支持已重新设计,以避免在使用 readdir 时为 dirent 结构分配内存。这减少了内存消耗,并消除了如果 readdir 产生非常长的目录名时缓冲区溢出的可能性。
    • 在 Windows 上,使用 Boost.WinAPI 选择目标 Windows 版本。
    • **新增:** 添加了 directory_options 枚举,它反映了 C++20 中的同名枚举。directory_iteratorrecursive_directory_iterator 支持该枚举来自定义迭代行为。特别是,迭代器现在支持跳过由于权限不足而无法打开的目录。symlink_option 枚举现在已弃用,应替换为 directory_options
    • 默认情况下,recursive_directory_iterator 现在在出错时重置为结束状态,如 C++20 所要求。(#112
    • **新增:** 添加了选项 directory_options::pop_on_error,它将 recursive_directory_iterator 配置为通过重复调用 pop() 直到成功或达到结束状态来尝试从迭代错误中恢复。(#113
    • **新增:** 添加了选项 directory_options::skip_dangling_symlinks,它将 recursive_directory_iterator 配置为不跟随悬空目录符号链接并继续迭代,而不是报告错误。
    • **已弃用:** recursive_directory_iterator 的以下成员现在标记为已弃用:level()no_push_pending()no_push_request()no_push()。建议用户将其替换为标准对应项:depth()recursion_pending()disable_recursion_pending()。请注意,recursion_pending()no_push_pending()no_push_request() 的含义相反。已弃用的方法将在未来的版本中删除。
    • 修复了 path::lexically_relative(以及任何依赖算法),以正确处理其参数中的空路径元素、点路径元素和点点路径元素。该行为更接近于 C++17 std::path::lexically_relative,因为空路径元素和点路径元素被忽略,点点路径元素通过减少生成的相对路径中点点路径元素的数量来考虑。(#76
  • Functional/Factory:
    • Glen Fernandes 重写了 factoryvalue_factory 的实现,以提供以下功能
      • 尽可能支持右值参数
      • 尽可能通过可变参数模板支持任意数量的参数
      • 支持 final 的分配器
      • 支持使用 fancy 指针的分配器
      • 支持禁用异常 (BOOST_NO_EXCEPTIONS)
      • 改进了编译时间
    • 以下功能已被移除
      • 通过 BOOST_FUNCTIONAL_VALUE_FACTORY_MAX_ARITY 增加 C++03 编译器的限制
      • 通过 BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_T 使用 boost::none_t 代替 void
  • GIL:
    • 新增
      • GSoC 2019:用于图像缩小采样的 Lanczos 重采样(PR#309)。
      • GSoC 2019:用于二值阈值化、反二值阈值化和截断阈值化的方法(PR#313)。
      • GSoC 2019: Otsu 阈值化方法(PR#314)。
      • GSoC 2019: 使用邻域区域的均值或高斯加权和进行自适应阈值化(PR#315)。
      • GSoC 2019: Harris 响应计算(无非极大值抑制的角点检测器)(PR#350)。
      • GSoC 2019: Hessian 角点检测器(PR#364)。
      • GSoC 2019: 在数值扩展中添加用于定义二维内核的类型 kernel_2dkernel_2d_fixedPR#361)。
      • GSoC 2019: 将二维卷积实现为新函数 convolve_2dPR#367)。
      • GSoC 2019: 使用均值滤波器进行盒式滤波(PR#383)。
      • GSoC 2019: 基于归一化均值滤波器的模糊函数(PR#383)。
      • GSoC 2019: Sobel 和 Scharr 算子(PR#392)。
      • GSoC 2019: 中值滤波器,用于去除图像噪声(PR#393)。
      • 继续添加新的测试用例并显著提高了整体测试覆盖率。
      • 记录了 cached_location_t 的用途(PR#287)。
      • 数值扩展中添加了函数 convolve_1d,以便方便地使用 convolve_rowsconvolve_colsPR#347)和(PR#367)。
      • 数值扩展中添加了函数 extend_boundary,用于执行图像边界扩展(PR#386)。
      • 项目发行说明维护在 Markdown 文件 RELEASES.md 中(PR#404)。
    • 更改
      • 将所有测试、核心功能和扩展移动到 test/ 目录下(PR#302)。
    • 移除
      • 将 Boost.MPL 替换为 Boost.MP11(PR#274)。
      • 移除 Boost.TypeTraits 的使用(PR#274)。
      • 放弃对 GCC <= 4.8 的支持(PR#296)。
      • 移除未使用的文件 include/boost/gil/version.hppPR#403)。
    • 修复
      • 默认初始化的通道和像素对象的值不确定(PR#273)。
      • 由于 std::is_trivially_default_constructible 特化导致的未定义行为(PR#284)。
      • 读取具有无效标头的 PNG 文件时崩溃(PR#385)。
      • 将三法则应用于多种类型。
      • 删除了默认复制赋值运算符或复制构造函数的隐式定义的弃用用法。
  • 直方图:
    • 一些新功能和性能改进,以及一些错误修复
    • 有关更改的完整列表,请参阅完整的发行说明
  • 日志:
    • 改进了与 clang-win 编译器的兼容性。
  • MPI:
    • 文档说明。
    • 修复了使用显式输入缓冲区偏移量时的 scatterv 错误。
    • 支持使用 MPI_Probe 并与 Intel MPI >= 2019.4 兼容
    • Windows 上的符号可见性
  • 数学:
    • 添加了超几何函数 1F0、0F1、2F0、1F1 和 pFq。
    • 添加了 Jacobi 多项式(及其导数)的计算。
    • 添加了 Gegenbauer 多项式(及其导数)的计算。
    • 添加了基数 B 样条曲线(及其导数)作为其本身的多项式函数。
    • 添加了基数三角插值法。
    • 添加了新的统计信息子部分。
    • 添加了单样本学生 t 检验。
    • 添加了用于正态性的 Anderson Darling 检验。
    • 添加了用于自相关的 Ljung Box 检验。
    • 添加了用于随机序列的游程检验。
    • 标头 boost/math/tools/univariate_statistics.hppboost/math/tools/bivariate_statistics.hpp 已弃用,改为使用 boost/math/statistics/univariate_statistics.hppboost/math/statistics/bivariate_statistics.hpp
    • 添加了经验 CDF 分布。
    • 重新设计了多精度伽马函数使用的斯特林近似,使其适用于所有在常规精度下使用 Lanczos 近似的函数。并将 Lanczos 近似扩展到高达 100 位小数精度。
  • 多精度:
    • 大型 constexpr 更新允许 cpp_int 和 float128 算术在 gcc 和 clang 9 或更高版本,或任何支持 std::is_constant_evaluated() 的编译器中完全 constexpr
    • 修复了可变精度 mpf_float 中导致其在尝试选择正确精度时陷入困境的错误 - 请参阅 https://github.com/boostorg/multiprecision/issues/164。
  • 结果:
    • 增强功能
      • 独立 outcome 现在可以 make install 安装,并且 cmake find_package() 可以找到它。请注意,您必须单独安装 Outcome 的依赖项 quickcpplib 并对其进行 find_package(),否则 Outcome 的 find_package() 将失败。
      • 独立 outcome 用于指定依赖库的 git 子模块机制已被 cmake 对依赖项的超级构建机制所取代。在 cmake 配置时,将 git 克隆 quickcpplib 的内部副本,并将其构建并安装到构建目录中,内部 find_package() 将从中使用它。这打破了将未配置的 Outcome 仓库用作 Outcome 实现的用法,现在必须执行以下操作之一:1. 将 Outcome 作为子目录添加到 cmake 构建中。2. 使用 cmake 超级构建(即 ExternalProject_Add())将 Outcome 构建并安装到本地安装中。3. 使用其中一个单头版本。
      • 对于独立 outcome,现在将检查当前编译器是否可以编译包含 C++ 概念的代码,如果可以,则所有 Outcome 的 cmake 使用者都将启用 C++ 概念。将 cmake 变量 CXX_CONCEPTS_FLAGS 设置为空字符串可以防止自动检测和启用 C++ 概念支持。
      • OUTCOME_TRY 操作现在向编译器提示该操作将成功。P1886 **错误速度基准测试** 表明,通过向编译器提示表达式是否预期成功,在非常小的函数中可以获得相当大的收益。OUTCOME_TRY 以前根本没有向编译器提示,但现在可以了。一套新的宏 OUTCOME_TRY_FAILURE_LIKELY 向编译器提示预期失败。如果您希望返回到以前未提示的行为,请将 OUTCOME_TRY_LIKELY(expr) 定义为 (!!expr)
      • #199 添加了对 C++ 协程的支持。这分为两部分,首先,现在有一个 OUTCOME_CO_TRY() 操作,适用于在 C++ 协程中执行 TRY 操作。其次,在头文件 outcome/coroutine_support.hpp 中,有 eager<OutcomeType>lazy<OutcomeType> 的实现,它们可以让您更自然、更有效地在 C++ 协程中使用 basic_resultbasic_outcome——具体来说,如果结果或 outcome 将从异常指针构造,则协程中抛出的异常将返回一个错误或异常结果以及抛出的异常,而不是通过协程机制抛出异常(在当前的编译器中,这很有可能导致程序崩溃)。eager<T>lazy<T> 也都可以接受任何 T。两者都经过测试,并在 VS2019 和 clang 9 上工作正常。
      • #210 make_error_code()make_exception_ptr() 现在也被认为是 basic_result<> 的兼容复制和移动转换。这允许您将 basic_result<T, E> 构造为 basic_result<T, error_code>,其中 E 是一个自定义类型,它实现了 ADL 发现的自由函数 error_code make_error_code(E),但在其他方面与 error_code 无关。exception_ptr 的可用性与 make_exception_ptr() 作为 ADL 发现的自由函数相同。为了减少构造函数的数量,basic_outcome<> 对此的支持不如 basic_result<>,但它将通过此机制接受来自 basic_result<>failure_type<> 的转换。
    • 错误修复
      • #184 编译器中对 [[nodiscard]] 支持的检测轻微损坏。
  • PolyCollection:
    • 维护工作。
  • 预处理器:
    • 添加了讨论空性的主题
    • 支持 C++20 __VA_OPT__ 结构
      • BOOST_PP_VARIADIC_HAS_OPT 指示在 C++20 级别是否支持 __VA_OPT__
      • BOOST_PP_CHECK_EMPTY 使用 C++20 级别的 __VA_OPT__ 测试空性
      • BOOST_PP_VA_OPT 比 C++20 级别的 __VA_OPT__ 更灵活的替代方案
  • 智能指针:
    • 已为标量和数组实现了 allocate_unique。(Glen Fernandes)
  • 测试:
    • Boost.test v3.12,更多详情请参阅更改日志
    • 新功能
      • 已添加对 C++17 std::string_view 的支持。
      • 改进了 boost::exception 的诊断,并且在没有 rtti 模式下也能正常工作(感谢 Mikhail Pilin / [pull_request 234])
    • 错误修复和拉取请求
  • VMD:
    • BOOST_VMD_IS_EMPTY 已更新为在 C++20 级别使用 __VA_OPT__,具有 100% 的可靠性

已测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang:3.0、4.0.1、6.0.1
    • Clang,C++0x:3.0
    • Clang,C++11:3.0、3.1、3.2、3.3、3.4、4.0.1、6.0.1、7.0.0、8.0.0
    • Clang,C++14:3.5.0、3.6.0、3.7.1、3.8.0、3.9.1、4.0.0、4.0.1、5.0.2、6.0.1、7.0.0、8.0.0
    • Clang,C++17:5.0.2、6.0.1、7.0.0、8.0.0
    • GCC:4.4.7、4.5.3、4.6.3、5.4.0、8.0.1
    • GCC,C++0x:4.4.7
    • GCC,C++11:4.7.3、4.8.5、4.9.4、5.4.0、6.4.0、7.1.0、8.0.1
    • GCC,C++14:5.4.0、5.5.0、6.4.0、7.1.0、7.3.0、8.0.1
    • GCC,C++17:7.3.0、8.0.1
    • Intel,C++14:18.0
  • OS X
    • Apple Clang:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++11:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++14:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++17:9.1.0、10.0.0
    • Apple Clang,C++1z:9.0.0
    • Apple Clang,C++2a:10.0.0
  • Windows
    • GCC:3.4.5、4.1.2、4.2.4、4.3.3、4.4.0、4.5.4
    • GCC,C++0x:4.6.4
    • GCC,C++11:4.7.3、4.8.1、4.9.3
    • GCC,C++14:5.1.0、5.2.0、5.3.0、6.1.0、6.2.0、6.3.0、6.4.0
    • GCC,C++17:7.1.0、7.2.0、7.3.0
    • Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0、14.1
  • FreeBSD
    • Clang:4.0.0
    • Clang,C++11:4.0.0
    • Clang,C++14:4.0.0
    • Clang,C++1z:4.0.0

Boost 的其他测试编译器包括

  • Linux
    • Clang:3.0、3.8.1、3.9.1、4.0.1、5.0.2、6.0.1
    • Clang,C++0x:3.0
    • Clang,C++11:3.0、3.1、3.2、3.3、3.4、4.0.1、6.0.1、7.0.0、8.0.0
    • Clang,C++14:3.5.0、3.6.0、3.7.1、3.8.0、3.9.1、4.0.0、4.0.1、5.0.2、6.0.1、7.0.0、8.0.0
    • Clang,C++17:5.0.2、6.0.1、7.0.0、8.0.0
    • GCC:4.4.7、4.5.3、4.6.3、4.9.4、5.4.0、5.5.0、8.0.1
    • GCC,C++0x:4.4.7
    • GCC,C++11:4.7.3、4.8.5、4.9.4、5.4.0、6.4.0、7.1.0、8.0.1
    • GCC,C++14:5.4.0、5.5.0、6.3.0、6.4.0、7.1.0、7.3.0、8.0.1、8.1.0
    • GCC,C++17:7.3.0、8.0.1
    • Intel,C++14:18.0
  • OS X
    • Apple Clang:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++11:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++14:9.0.0、9.1.0、10.0.0
    • Apple Clang,C++17:9.1.0、10.0.0
    • Apple Clang,C++1z:9.0.0
    • Apple Clang,C++2a:10.0.0
  • Windows
    • GCC:3.4.5、4.1.2、4.2.4、4.3.3、4.4.0、4.5.4
    • GCC,C++0x:4.6.4
    • GCC,C++11:4.7.3、4.8.1、4.9.3
    • GCC,C++14:5.1.0、5.2.0、5.3.0、6.1.0、6.2.0、6.3.0、6.4.0
    • GCC,C++17:7.1.0、7.2.0、7.3.0
    • Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0、14.1
  • FreeBSD
    • Clang:4.0.0
    • Clang,C++11:4.0.0
    • Clang,C++14:4.0.0
    • Clang,C++1z:4.0.0

致谢

Marshall Clow 和 Michael Caisse 管理了此版本。