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
* 下载链接由 The C++ Alliance 的资助支持。

已知问题

这些是库作者提供的补丁,发现得太晚以至于无法在发布版本中修复。请注意,它们尚未经过正常的测试流程。

更新的库

  • Asio:
    • 更改了 async_initiate 辅助函数,以便为 C++11 或更高版本自动推断其返回类型。
    • 更改了所有异步操作,以便为 C++14 或更高版本使用自动推断的返回类型。
    • 引入了概念以支持 async_initiate
    • 为所有 I/O 对象类型添加了嵌套模板类型 rebind_executor
    • 更改了启动函数对象,以通过嵌套类型 executor_type 和成员函数 get_executor() 报告其关联的 I/O 执行器。
    • 添加了 default_completion_token 特征,为 I/O 执行器类型提供了关联的默认完成令牌类型,以用于异步操作。此特征专门用于 use_awaitable 完成令牌,例如,允许异步操作按如下方式使用:co_await socket.async_connect(my_endpoint)
    • 为 Windows 特定的 I/O 对象的异步操作添加了缺少的 async_initiate
    • 确保执行器类型传播到新接受的套接字。
    • 更改为要求 Protocol 复制和移动操作永远不会抛出异常。
    • 更改为要求 Endpoint 默认构造函数和移动操作永远不会抛出异常。
    • 为协议访问器添加了 noexcept 限定符。
    • 为套接字移动构造函数添加了 noexcept 限定符。
    • 修复了在 Windows 上打开串行端口相关的问题
      • 使用正确的常量来初始化 RTS 控制标志。
      • 指定默认波特率 (9600)。
    • 修复了当异步 accept 操作自动重启时可能发生的丢失的“未完成工作计数”。
    • 有关更多详细信息,请查阅修订历史
  • Atomic:
    • 为某些版本的 libstdc++ 未将 __float128 视为浮点类型添加了解决方法。
    • 改进了与 clang-win 编译器的兼容性。
  • Beast:
    • 这是一个维护更新,包含错误修复和使用 Boost.Asio 中交付的新功能的更新。
    • 我们很想知道您或您的公司如何使用 Beast,请考虑在 Companies and Individuals Using Beast 列表中添加条目。
    • 有关完整的更改列表,请参阅完整的发行说明
  • Circular Buffer:
    • 修复问题 #29: max_size() 现在考虑了分配器的 max_size()。(Glen Fernandes)
  • Context:
    • 支持 architecture s390x
    • 删除了 execution_context
  • Endian:
    • 在 GCC 和 Clang 上使 endian_reverseconditional_reverse*_to_* 成为 constexpr
    • 添加了便捷的加载和存储函数
    • 添加了浮点便捷 typedef
    • 添加了 data() 的非常量重载;将其返回类型更改为 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
    • 已弃用: 为了向后兼容,除非定义了 BOOST_FILESYSTEM_NO_DEPRECATED 宏,否则 operations.hpp 仍然包含新的头文件 exception.hppfile_status.hppdirectory.hpp。这些隐式包含被认为是已弃用的,将在未来的版本中删除。鼓励用户直接包含新的头文件或包含 filesystem.hpp
    • filesystem_error 异常现在在 Boost.Filesystem 的编译库中实现。用户可能需要在他们的项目中添加与 Boost.Filesystem 库的链接。
    • 在 POSIX.1-2008 平台上,使用 utimensat 而不是 utimeutime 在 POSIX.1-2008 中声明为已过时,并且可以禁用,例如在 uClibc-ng 中。(<PR#115>)
    • directory_iterator 现在在内存分配错误时处于结束状态。
    • 在 POSIX 系统上的 directory_iterator 中,readdir/readdir_r 的支持已重新设计,以避免在使用 readdir 时为 dirent 结构分配内存。这减少了内存消耗,并消除了在 readdir 生成非常长的目录名称的情况下缓冲区溢出的可能性。
    • 在 Windows 上,使用 Boost.WinAPI 选择目标 Windows 版本。
    • 新增: 添加了 directory_options 枚举,它反映了 C++20 中同名的枚举。directory_options 枚举在 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 的实现,以提供以下功能
      • 在可能的情况下支持右值参数
      • 在可能的情况下通过可变参数模板支持任意数量的参数
      • 支持最终分配器
      • 支持使用花哨指针的分配器
      • 支持禁用的异常 (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: 用于定义 2D 内核的类型 kernel_2dkernel_2d_fixed,在 Numeric 扩展中 (<PR#361)。
      • GSoC 2019: 2D 卷积的实现,作为新函数 convolve_2d (<PR#367)。
      • GSoC 2019: 使用平均滤波器的盒式滤波 (<PR#383)。
      • GSoC 2019: 基于归一化均值滤波器的模糊函数 (<PR#383)。
      • GSoC 2019: Sobel 和 Scharr 算子 (<PR#392)。
      • GSoC 2019: 用于去除图像噪声的中值滤波器 (<PR#393)。
      • 继续添加新的测试用例,并显着提高了总体测试覆盖率。
      • 记录了 cached_location_t 的用途 (<PR#287)。
      • Numeric 扩展中的函数 convolve_1d,方便使用 convolve_rowsconvolve_cols (<PR#347) 和 PR#367)。
      • Numeric 扩展中的函数 extend_boundary,用于执行图像边界扩展 (<PR#386)。
      • 项目发行说明维护在 Markdown 文件 RELEASES.md 中 (<PR#404)。
    • 更改
      • 将所有测试、核心功能和扩展移动到 test/ 目录中 (<PR#302)。
    • 删除
      • 用 Boost.MP11 替换 Boost.MPL (<PR#274)。
      • 删除了 Boost.TypeTraits 的使用 (<PR#274)。
      • 放弃了对 GCC <= 4.8 的支持 (<PR#296)。
      • 删除了未使用的 include/boost/gil/version.hpp 文件 (<PR#403)。
    • 修复
      • 默认初始化的通道和像素对象的不确定值 (<PR#273)。
      • 由于 std::is_trivially_default_constructible 特化导致的未定义行为 (<PR#284)。
      • 读取带有无效标头的 PNG 文件时崩溃 (<PR#385)。
      • 为多种类型应用了三法则。
      • 删除了对默认复制赋值运算符或复制构造函数的已弃用隐式定义的用法。
  • Histogram:
    • 几项新功能和性能改进,以及一些错误修复
    • 有关完整的更改列表,请参阅完整的发行说明
  • Log:
    • 改进了与 clang-win 编译器的兼容性。
  • MPI:
    • 文档澄清。
    • 修复了使用显式输入缓冲区偏移量时的 scatterv 错误。
    • 启用将 MPI_Probe 及其友元与 Intel MPI >= 2019.4 一起使用
    • Windows 上的符号可见性
  • Math:
    • 添加了超几何函数 1F0、0F1、2F0、1F1 和 pFq。
    • 添加了 Jacobi 多项式(及其导数)评估。
    • 添加了 Gegenbauer 多项式(及其导数)评估。
    • 添加了 Cardinal B 样条(及其导数),作为其自身的多项式函数。
    • 添加了 Cardinal 三角插值。
    • 添加了新的统计子部分。
    • 添加了单样本 Student's T 检验。
    • 添加了用于正态性检验的 Anderson Darling 检验。
    • 添加了用于自相关的 Ljung Box 检验。
    • 添加了用于随机序列的 Runs 检验。
    • 头文件 boost/math/tools/univariate_statistics.hppboost/math/tools/bivariate_statistics.hpp 已弃用,建议使用 boost/math/statistics/univariate_statistics.hppboost/math/statistics/bivariate_statistics.hpp
    • 添加了经验 CDF 分布。
    • 重做了多精度 gamma 函数使用的 Sterling 近似,使其适用于所有使用 Lanczos 近似的常规精度函数。还将 Lanczos 近似扩展到高达 100 位十进制数字精度。
  • Multiprecision:
    • Big constexpr 更新允许 cpp_int 和 float128 算术在 gcc 和 clang 9 或更高版本,或任何支持 std::is_constant_evaluated() 的编译器上完全为 constexpr
    • 修复了可变精度 mpf_float 中的一个错误,该错误导致它陷入试图选择正确精度的困境 - 请参阅 https://github.com/boostorg/multiprecision/issues/164。
  • Outcome:
    • 增强功能
      • 独立 outcome 现在可以 make install 安装,并且 cmake find_package() 可以找到它。请注意,您必须单独安装和 find_package() Outcome 的依赖项 quickcpplib,否则 Outcome 的 find_package() 将失败。
      • 独立 Outcome 用于指定依赖库的 git 子模块机制已被 cmake 超级构建依赖项机制取代。在 cmake 配置时,quickcpplib 的内部副本将被 git 克隆、构建并安装到构建目录中,内部 find_package() 从那里使用它。这打破了将未配置的 Outcome 仓库用作 Outcome 实现的用法,现在必须执行以下操作之一:1. 将 Outcome 作为子目录添加到 cmake 构建中。2. 使用 cmake 超级构建(即 ExternalProject_Add())构建 Outcome 并将其安装到本地安装中。3. 使用单头文件版本之一。
      • 对于独立 Outcome,现在检查当前编译器是否会编译包含 C++ Concepts 的代码,如果会,则 Outcome 的所有 cmake 使用者都将启用 C++ Concepts。将 cmake 变量 CXX_CONCEPTS_FLAGS 设置为空字符串以防止自动检测和启用 C++ Concepts 支持。
      • 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:
    • 维护工作。
  • Preprocessor:
    • 添加了讨论空主题
    • 支持 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__ 替代方案
  • Smart Pointers:
    • 为标量和数组实现了 allocate_unique。(Glen Fernandes)
  • Test:
    • 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 管理了此版本。