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 更改为“强类型定义”风格的类。
    • 修复了 experimental::as_single 以使其与处理程序钩子弃用一起工作。
    • 确保在所有平台上清理 pthread 条件变量属性。
    • 阐明了套接字和描述符的线程安全注意事项。
    • 确保如果 macOS/FreeBSD 上的 socket() 失败,则不会覆盖 errno
    • 修复了移动赋值时 io_contextthread_pool 执行程序的 work tracking。
    • 确保仅从实现文件访问内部 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_EQ, BOOST_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、index、buffer 等的 Umbrella 策略(目前未记录)。
      • PR#797 新的 azimuth() 算法。
      • PR#801 提高了地理区域计算的精度。
      • PR#820 参数比例添加到 svg_mapper。
    • 错误修复
      • PR#808 修复了启用 rtree 序列化时的编译错误(感谢 Tristan Carel)。
      • PR#815 修复了 buffer() 中的问题。
      • set 操作和 buffer 中的各种修复。
    • 重大更改
      • 删除了策略 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:
    • (#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,以消除有关前者在 C++17 及更高版本中已弃用的 libc++ 警告。该标签指示实例化的模板应在内部使用 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。
    • 修正了在某些多精度情况下 Stirling 近似的使用,修复了 #396
    • 消除了 clang 上的 -Wimplicit-int-float-conversion。
    • 修复了 quaternion/octonion 中的一些 constexpr 问题。
    • tanh_sinh 积分的次要性能修复。
    • 更新了超几何函数内部缩放,以允许使用多精度类型的 64 位(long long)指数。
  • Multiprecision:
    • 重大更改:大规模重构和代码简化使 C++11 成为绝对要求。
    • 在标头中使用 BOOST_TRY/CATCH,以便代码可以在无异常环境中使用。
    • 修正了 pow 中的边界情况,修复了 #277
    • 修正了抛出的异常类型以匹配 lsb/msb 中的文档:修复了 #257
    • 允许在相关的但不同类型(即具有相同分配器的类型)之间移动和运算符,修复了 #278
  • Nowide:
    • 修复了当使用 seek 或 sync 函数并且转换了换行符(例如在 Windows 上)时,文本文件流字符的丢弃问题
    • 修复了重用(通过 open)已关闭的文件流时潜在的 use-after-free 错误
    • 修复了当使用已移动或交换到源具有 put-back 字符或设置为非缓冲模式的文件流时,潜在的无效内存访问
    • 通过不定义 __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.Outcome 现在应该可以使用定义的 BOOST_NO_EXCEPTIONS 进行编译。感谢 Boost.Exception 的维护者 Emil 为我做的更改,Boost.Outcome 现在应该可以在全局禁用 C++ 异常的情况下进行编译。您将无法使用 boost::exception_ptr,因为它在全局禁用 C++ 异常时无法包含。
      • 重大更改 #244 令人震惊的是,自此库创建以来,BOOST_OUTCOME_TRY 对于某些边界情况代码一直被破坏,这需要在 TRY 的工作方式上进行重大更改。有关更多详细信息,请参阅 文档中的 changelog
  • Parameter:
    • 修复了当 rvalue 用作函数的命名参数的默认值时,MSVC 2015 代码错误编译的解决方法。 (PR#109, #132)
  • PFR:
    • 修复了模板构造函数中 SFINAE 表达式中缺少 const 的类型的反射。现在,即使 LWG3050 未修复,具有 std::optional<std::chrono::duration<???>> 字段的聚合的反射也可以在任何标准库实现上工作。
    • 比较函数现在是 constexpr #52
    • 修复了文档中的许多拼写错误(感谢 Phil Miller #63
  • PolyCollection:
    • 解决了 GCC 错误,该错误影响 GCC 版本 9.3-10.2(问题 #20)。
  • Predef:
    • 版本 1.13
    • 添加了 ARCH_PPC_64 预定义。
    • 修复了 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 上的 pre-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 管理了此版本。