Boost C++ 库

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

版本 1.76.0

版本 1.76.0

2021 年 4 月 16 日 21:05 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_76_0.tar.bz2f0397ba6e982c4450f27bf32a2a83292aba035b827a5623a14636ea583318c41
boost_1_76_0.tar.gz7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca
windowsboost_1_76_0.7z88782714f8701b6965f3fce087a66a1262601dd5ccd5b2e5305021beb53042a1
boost_1_76_0.zip0fd43bb53580ca54afc7221683dfe8c6e3855b351cd6dce53b1a24a7d7fbeedd
* 下载链接由 C++ 联盟 的捐赠支持。

新库

  • 无新库

已更新的库

  • Asio:
    • 添加了 ip::scope_id_type 类型别名。
    • 添加了 ip::port_type 类型别名。
    • 为 IP 地址添加了 std::hash 特化。
    • ip::basic_endpoint<> 添加了 std::hash 特化。
    • 重构了 SFINAE 的使用以提高编译时间。
    • 为自定义点添加了友元支持,并将大多数自定义设为私有。
    • any_io_executor 更改为“强 typedef”风格的类。
    • 修复了 experimental::as_single 以便与处理程序钩子弃用一起使用。
    • 确保在所有平台上清理 pthread 条件变量属性。
    • 阐明了关于套接字和描述符的线程安全说明。
    • 确保在 macOS/FreeBSD 上 socket() 失败时不会覆盖 errno
    • 修复了移动分配时 io_contextthread_pool 执行器的任务跟踪。
    • 确保内部 call_stack 对象仅从实现文件中访问。
    • 修复了 I/O 对象移动分配,以确保执行器处于有效状态。
    • 修复了 MSVC 上函数默认模板参数的编译器支持检测。
    • 阻止了 blocking.always 属性与 strand<> 一起使用,因为它没有产生正确的语义。
    • 移除了已弃用的文件asio/impl/src.cpp.
  • Atomic:
    • 修复了 ARM 上 MSVC 的编译。 (PR#49)
  • Beast:
    • 此更新带来了小的错误修复和改进的 CI 报告。
    • 我们很想知道您或您的公司如何使用 Beast,请考虑在 使用 Beast 的公司和个人 列表中添加条目。
    • 有关更改的完整列表,请参阅完整的 发行说明
  • Bind:
    • 添加了对将标准 C++11 占位符与 boost::bind 一起使用的支持。
    • 更新 boost::apply 以使用可变参数模板和完美转发。
  • Container:
  • Core:
    • 在兼容的引用包装器之间添加隐式转换。
    • 添加了 boost/core/cmath.hpp,它是来自 <cmath> 的浮点分类函数的便携式实现。
    • 添加了 boost/core/bit.hpp,它是 C++20 标准头文件 <bit> 的便携式实现。
    • 修复了 C++20 下字符类型的 BOOST_TEST_EQBOOST_TEST_NE
    • 修改了分配器访问实用程序(现在支持 VS2013,并且没有使用 allocator_traits 的解决方法。)
  • DLL:
    • 重大变更boost::dll::import 已重命名为 boost::dll::import_symbol,以避免与 C++20 import 关键字冲突。
    • 更新了文档,包括 FAQ 部分。
  • Filesystem:
    • 更新了与 WASI 平台的兼容性。 (PR#169)
    • 修复了如果路径为 "////" 时 path::remove_filename 抛出异常的问题。 (#176)
    • 修复了 create_directories 忽略了内部发出的文件状态查询操作的错误。这可能导致 create_directories 返回不正确的错误代码。 (#182)
  • Geometry:
    • 改进
      • PR#670 新的 IOs to_wkt() 和 from_wkt()(感谢 Baidyanath Kundu)。
      • PR#756 非笛卡尔和稳健的凸包。
      • PR#768 用于 relops、setops、索引、缓冲区等的伞形策略(目前未记录)。
      • PR#797 新的 azimuth() 算法。
      • PR#801 提高了地理区域计算的精度。
      • PR#820 将参数比例添加到 svg_mapper。
    • Bugfixes
      • PR#808 修复了启用 rtree 序列化时的编译错误(感谢 Tristan Carel)。
      • PR#815 修复了 buffer() 中的问题。
      • 对 set 操作和缓冲区进行了各种修复。
    • 重大变更
      • 移除了策略 convex_hull::graham_andrew。
  • GIL:
    • 重大变更:在下一个版本中,我们将放弃对 GCC 5 的支持。我们还将把所需的最低 C++ 版本从 C++11 更改为 C++14。
  • Histogram:
    • 此版本包含关键修复,请检查您的结果是否未受影响。
    • 有关详细信息,请参阅 发行说明
  • Intrusive:
    • 减少了编译时依赖
      • linear_slist_algorithms 在返回时使用简单的 node_ptr 而不是 std::pair。
      • list/slist 使用 operator </operator == 而不是 std::equal_to/std::less
  • Interprocess:
  • JSON:
    • Bishop Fox 的 安全报告
    • (#481) 重构了 value_from 的实现;用户自定义现在始终优先于库提供的重载。
    • (#484) 修复了某些浮点数的不精确解析。
    • (#485) 修复了与 Boost 一起使用时独立模式下的链接错误。
    • (#497) 修复了 GCC 4.8 上的 Boost.Build 构建。
  • LexicalCast:
    • 放弃了对 Boost.Math 的依赖(感谢 Peter Dimov #37, #39)。
    • 修复了 CI 和覆盖率(感谢“C++ 联盟”的 Sam Darwin #38, #42)。
  • Log:
    • 错误修复
      • 更正了 asynchronous_sink 前端的 unbounded_fifo_queue 策略中使用的线程安全日志记录队列实现中的形式竞争条件。TSAN 可以检测到该竞争,但在大多数当前的 CPU 架构和编译器上,它并不是真正的问题。 (#139)
      • 复制带有通道属性的记录器(例如 channel_logger)时,通道属性现在从原始记录器深层复制。这意味着修改新记录器中的通道将不再影响原始记录器。
      • 将模板参数中 std::allocator<void> 的使用替换为新的标记类型 boost::log::use_std_allocator,以消除 libc++ 关于前者在 C++17 及更高版本中已弃用的警告。该标签指示实例化模板应在内部使用 std::allocator 的特化来分配动态内存,因此更改没有功能影响。 (#141)
      • Boost.Log 不再在 MinGW 和 MinGW-w64 上定义 __MSVCRT_VERSION__ 宏。定义此宏导致与 UCRT 不兼容,UCRT 在最近的 MinGW-w64 中可用作一个选项。 (PR#149)
    • 有关更多详细信息,请参阅 changelog
  • Math:
    • 重大变更:现在已删除 C++03 支持,现在需要使用符合 C++11 或更高版本的编译器才能使用此库。
    • 添加了 Z 检验
    • 为单变量和双变量统计添加了执行策略支持:启用并行执行(需要 C++17 和 <execution>)。
    • 对 CI 测试进行了重大更新/改进。
    • 双变量统计现在支持整数。
    • T 检验现在支持整数。
    • 线性回归现在支持整数。
    • 修正了 beta 分布在端点的 PDF。
    • 修正了在某些多精度情况下对斯特林近似的使用,修复了 #396
    • 消除了 clang 上的 -Wimplicit-int-float-conversion 警告。
    • 修复了四元数/八元数中的一些 constexpr 问题。
    • 对 tanh_sinh 积分进行了小的性能修复。
    • 更新了超几何函数的内部缩放,以允许使用多精度类型的 64 位(long long)指数。
  • 多精度:
    • 重大变更:大规模重构和代码简化使得 C++11 成为绝对要求。
    • 在头文件中使用 BOOST_TRY/CATCH,以便代码可以在无异常环境中使用。
    • 修正了 pow 中的边界情况,修复了 #277
    • 修正了抛出的异常类型以匹配 lsb/msb 中的文档:修复了 #257
    • 允许在相关但不同的类型(即具有相同分配器的类型)之间进行移动和操作,修复了 #278
  • Nowide:
    • 修复了在使用 seek 或 sync 函数并且换行符被转换(例如在 Windows 上)时,文本文件流丢弃字符的问题。
    • 修复了当重用(通过 open)已关闭的文件流时,可能发生的 use-after-free 错误。
    • 修复了当使用已移动或交换的文件流时,可能发生的无效内存访问,此时源具有回退字符或设置为无缓冲模式。
    • 通过不定义 __MSVCRT_VERSION__ 来修复与 ucrt 运行时的兼容性。
    • 已知问题:文本文件的读取性能下降。二进制文件和写入不受影响。
  • Optional:
    • 修复了 MSVC 警告 C4702。
  • Outcome:
    • 公告
      • 重大变更:经过一年和三个主要的 Boost 版本宣布这一即将到来的变更后,这是 v2.2 分支的第一个版本。此分支对 Boost 1.75 及更早版本中提供的 Outcome v2.1 进行了一些重大破坏性更改,请参阅文档了解详细信息。
    • 增强
      • VS2019.8 更改了启用协程的方式,导致 Outcome 无法在该编译器上编译。
      • 如果在 C++ 20 上,我们现在使用 C++ 20 的 [[likely]] 而不是编译器特定的标记来指示 TRY 何时可能成功或失败。
      • 重大变更:以前,spare_storage(const basic_result|basic_outcome *) noexcept 的值未通过 BOOST_OUTCOME_TRY 传播,这会导致在构造错误结果时捕获的堆栈回溯在每个 TRY 点被丢弃。通过向 success_type<T>failure_type<T> 以及 auto success(T &&, ...)auto failure(T &&, ...) 添加可选的 spare_storage,此问题已得到解决。
    • 错误修复
      • 现在,应该可以在定义了 BOOST_NO_EXCEPTIONS 的情况下编译 Boost.Outcome。感谢 Boost.Exception 的维护者 Emil 为我做出的更改,现在应该可以在全局禁用 C++ 异常的情况下编译 Boost.Outcome。如果全局禁用 C++ 异常,则无法包含 boost::exception_ptr,因为无法包含它。
      • 重大变更 #244 令人震惊的是,自此库诞生以来,BOOST_OUTCOME_TRY 在某些边界情况代码中一直存在问题,这需要在 TRY 的工作方式上进行重大更改。 请参阅 文档中的更改日志,了解更多详细信息。
  • Parameter:
    • 修复了当使用右值作为函数的命名参数的默认值时,MSVC 2015 代码错误编译的问题。(PR#109, #132
  • PFR:
    • 修复了模板构造函数中 SFINAE 表达式中缺少 const 的类型反射。现在,即使未修复 LWG3050,具有 std::optional<std::chrono::duration<???>> 字段的聚合的反射在任何标准库实现上都可以正常工作。
    • 比较函数现在是 constexpr #52
    • 修复了文档中的许多拼写错误(感谢 Phil Miller #63
  • PolyCollection:
    • 解决了影响 GCC 9.3-10.2 版本的 GCC 错误(问题 #20)。
  • Predef:
    • 版本 1.13
    • 添加 ARCH_PPC_64 predef。
    • 修复 ARCH_WORD_BITS* 重定义警告/错误。
    • 从 Konstantin Ivlev 添加 ARCH_E2K,Elbrus 2000 架构。
    • 修复了不处理高于 10.x 版本的最近的 C++ 版本的问题。
    • 版本 1.12
    • 切换为在 OpenBSD 上使用 endian.h 头文件。(Brad Smith)
    • 修复了不处理高于 9 版本的最近的 stdcxx 版本的问题。
    • 修复了直接包含子 BSD OS 头文件导致重定义警告的问题。
    • 添加了直接包含所有头文件的 CI 测试。
    • 添加了 FreeBSD 上 clang 和 gcc 的 CI 测试。
    • 添加了 WORD_BITS 一组预定义,以检测架构字大小。初始实现灵感来自 Mikhail Komarov 的提交。
    • 为 Cygwin 32 和 64 添加了 CI 测试。
  • PropertyTree:
    • Property Tree 有了新的维护者。
    • 修复了已弃用的 Boost.Bind 功能的使用。
    • 修复了指向 Wikipedia 的链接。
    • 使用 BOOST_OVERRIDE 来修复 GCC 警告。
    • 添加了广泛的 CI 测试。
  • Regex:
    • Regex 现在是仅头文件的,C++03 模式除外。
    • 现在已弃用对 C++03 的支持。
    • 该库现在可以“独立”使用,无需其余的 Boost 存在。
  • Stacktrace:
    • 更好地支持 clang 上 C++11 之前的构建 #102
    • 关于不要在信号处理程序中使用 boost::stacktrace::stacktrace 的更严厉警告 #71
  • TypeTraits:
    • 修复了 Visual Studio 托管代码项目。
  • Variant2:
    • 改进了双缓冲情况下的生成代码。

更新工具

测试的编译器

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, 9.0.0, 10.0.0, 11.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, 9.0.0, 10.0.0, 11.0.0
    • Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.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, 11.0.0
    • Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0, 11.0.0
    • Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0, 11.0.0
    • Apple Clang, C++17: 9.1.0, 10.0.0, 11.0.0
    • Apple Clang, C++1z: 9.0.0
    • Apple Clang, C++2a: 10.0.0, 11.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 和 Glen Fernandes 管理了此版本。