Boost C++ 库

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

版本 1.84.0

版本 1.84.0

2023年12月13日 23:54 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_84_0.tar.bz2cc4b893acf645c9d4b698e9a0f08ca8846aa5d6c68275c14c3e7949c24109454
boost_1_84_0.tar.gza5800f405508f5df8114558ca9855d2640a2de8f0445f051fa1c7c3383045724
windowsboost_1_84_0.7z81a4d10075731966477276c47324ecd9cac02da49899d36c48eba66e40014f25
boost_1_84_0.zipcc77eb8ed25da4d596b25e77e4dbb6c5afaac9cddd00dc9ca947b6b268cc76a4
* 下载链接由 The C++ Alliance 的资助支持。

更新了默认目标 Windows 版本

Boost.WinAPI,一个被其他 Boost 库内部用于定义 Windows SDK 组件的库,已更新为默认情况下以 Windows 10 API 为目标(如果可能)。这意味着 Boost 库将默认以 Windows 10 为目标,并且可能无法在较旧的 Windows 版本上运行。这包括 Boost 分发的预构建二进制文件。

受影响的库包括

  • Boost.Atomic
  • Boost.Beast
  • Boost.Chrono
  • Boost.DateTime
  • Boost.DLL
  • Boost.Filesystem
  • Boost.Interprocess
  • Boost.Log
  • Boost.Pool
  • Boost.Process
  • Boost.System
  • Boost.Stacktrace
  • Boost.Thread
  • Boost.UUID

以及依赖于上述库的库。

用户可以通过在构建和使用 Boost 时定义 BOOST_USE_WINAPI_VERSION_WIN32_WINNT 为所需的版本号来更改默认设置。例如,要构建以 Windows 7 为目标的 Boost,可以使用如下命令行

    b2 variant=release define=BOOST_USE_WINAPI_VERSION=0x0601 stage

但是请注意,各个库可能对其支持的最低 Windows 版本有自己的要求。

Windows API 版本号列表可以在 页面上查看。

新库

  • Cobalt: 来自 Klemens Morgenstern 的 C++20 协程的基本算法和类型。
  • Redis: 基于 Boost.Asio 构建的 Redis 异步客户端库,来自 Marcelo Zimbres Silva。

更新的库

  • Any:
    • 不再支持 C++03 PR#26
    • 修复了参考文档生成。现在它不会被 Boost.PFR 参考覆盖。感谢 Peter Dimov 的调试。
  • Asio:
    • 更改为需要 C++11 作为最低语言标准。不再支持 C++03。
    • boost::asio::execution 命名空间中删除了已弃用的功能。
    • 删除了已弃用的调用和分配钩子。
    • 为通道添加了 try_send_via_dispatchtry_send_n_via_dispatch 函数。
    • 添加了 Asio 占位符和 std::bind 之间的兼容性。
    • 改进了对具有多个完成签名的通道的 C++11 支持。
    • 修复了通道异步操作和 any_completion_handler 之间的兼容性。
    • 修复了 any_completion_handler 与使用 BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT 进行编译之间的兼容性。
    • 为比较属于同一类别的混合执行器属性类型添加了缺少的相等运算符。
    • 修复了当基于 spawn 的堆栈协程与具有以 std::exception_ptr 开头的完成签名的异步操作一起使用时,会导致程序终止的问题。
    • 修复了尝试访问默认构造的 any_completion_handler 对象的关联器时可能发生的崩溃。
    • 修复了 ssl::stream<> 类的 async_handshake 操作,使其可以使用默认完成令牌。
    • 更新了所有示例以使用 C++11 作为最低语言标准。
  • Atomic:
    • 不再支持 C++03,最低要求的语言版本为 C++11。
    • 增加了对 x87 扩展双精度浮点数的支持,该精度在 FreeBSD 和 OpenBSD 上使用。 (#14)
    • 对 Windows 10 之前版本的 Windows 的支持已弃用,将在 Boost 1.87 中删除。
  • Beast:
    • 支持 immediate_executor
    • 删除已弃用的分配和调用钩子。
    • 完成 transfer_op 时使用显式类型 std::size_t。
    • BOOST_ASIO_INITFN_RESULT_TYPE 替换为 BOOST_ASIO_INITFN_AUTO_RES
    • server-flex-awaitable 示例重置解析器。
    • 修正了 websocket::stream::async_ping/pong 处理程序要求。
    • 更新了 websocket::stream::async_write_some 的文档。
  • Chrono:
    • 不再支持 C++03。
  • ContainerHash:
    • 不再支持 C++03。
  • Conversion:
    • 不再支持 C++03 PR#27
  • Core:
    • boost::swap 实用程序函数已重命名为 boost::core::invoke_swap,以避免在参数不可交换时形成潜在的无限递归。新函数在 boost/core/invoke_swap.hpp 中定义,并且在功能上等同于 boost::swap。旧的 boost::swap 名称为了向后兼容性而保留,但已弃用,将在未来的版本中删除。其 noexcept 规范已被删除,以避免由编译时递归引起的编译错误。可以定义 BOOST_ALLOW_DEPRECATED_SYMBOLSBOOST_ALLOW_DEPRECATED 以在过渡期间抑制弃用警告。 (#148)
    • 头文件 boost/swap.hppboost/utility/swap.hppboost/core/swap.hpp 已弃用,将被删除。请切换到 boost/core/invoke_swap.hpp。可以定义 BOOST_ALLOW_DEPRECATED_HEADERSBOOST_ALLOW_DEPRECATED 以抑制弃用警告。
  • CRC:
    • C++03 支持已弃用,将在 1.86 版本中删除。
  • DLL:
    • 不再支持 C++03 PR#66
  • Endian:
    • 不再支持 C++03。
  • Filesystem:
    • 正如在 Boost 1.82.0 中宣布的那样,不再支持 C++03。需要 C++11 或更高版本的编译器。
    • 修复了一些采用 error_code& ec 参数的 directory_entry 观察器在成功返回时未清除错误代码的问题。 (#291)
    • 在 Windows 上,提高了日期和时间转换的鲁棒性,并增加了对 1970 年 1 月 1 日之前的日期的支持。 (#293)
    • 删除了自 Boost.Filesystem 1.79.0 起已弃用的对 Windows CE 的支持。
    • 删除了 boost/filesystem/string_file.hpp 头文件。该头文件自 Boost.Filesystem 1.79.0 起已弃用。
    • 已弃用: 对 Windows 10 之前版本的 Windows 的支持已弃用,将在 Boost 1.87 中删除。
  • Geometry:
    • 解决的问题
      • #1138 修复两个多边形的差异
      • #1183 修复 union_ 不完整结果多边形
      • #1184 修复 intersection
      • #1186 修复 union_ 不正确的内环分配
      • 各种错误和警告的修复
  • Heap:
    • C++03 支持已弃用,将在 1.86 版本中删除。新要求将是 C++14。
  • JSON:
    • 实现直接解析到用户类型。
    • 为 optionals 和 variants 添加转换类别。
    • 放宽从迭代器对构造函数的迭代器要求。
    • 修复读取超出输入缓冲区的问题。
    • 修复 init list 构造函数的不一致选择。
  • LEAF:
    • 类 result<T> 标记为 nodiscard。
    • 添加成员 typedef result<T>::value_type。
    • verbose_diagnostic_info 将转换为字符串的操作延迟到达到错误处理范围为止。
    • 改进了对嵌入式开发的支持。
    • 改进了 Visual Studio 2015 兼容性(感谢 godmaycrying)。
    • 次要错误修复和改进。
    • 放弃了对 GCC 4.8 和 4.9 的支持。
  • LexicalCast:
    • 不再支持 C++03 PR#62
    • 修复了 clang 的 -Wdeprecated-copy-with-dtor 警告。感谢 Romain Geissler 的 PR PR#59
    • 删除了对 Boost.Range 的依赖 PR#63
  • Locale:
    • WinAPI 后端的 to_title 返回未更改的字符串而不是空字符串
    • 改进了对 char8_tstd::u8string 的支持
    • 修复了使用负时间时的 off-by-one 错误 PR#198
    • 修复了格式字符串中大括号的转义处理 #194
    • 修复了一些构建错误和警告,特别是 MSVC 上的一个,请参阅 #189
  • Lockfree:
    • C++03 支持已弃用,将在 1.86 版本中删除。新要求将是 C++14。
  • Log:
    • 不再支持 C++03。需要 C++11 或更高版本的编译器。
    • 当使用对于使用 Boost.Regex v5 来说足够一致的 C++11 编译器构建时,Boost.Log 不再链接 Boost.Regex 预构建库,因为 Boost.Regex v5 是仅头文件的库。
    • 对 Windows 10 之前版本的 Windows 的支持已弃用,将在 Boost 1.87 中删除。
  • Math:
    • 改进 ccmath 错误检测。
    • 删除对已弃用的 std::numeric_limits<>::has_denorm 的使用,请参阅 1028
    • 修正了非中心 t 分布中的非收敛错误,请参阅 1035
    • 调整 Bessel 函数近似值 [sub 1]F[sub 1] 以避免在负整数处取 tgamma,请参阅 1034
    • 避免 ibeta 中出现虚假的溢出和除以零,请参阅 1006
    • 提高了使用 Sterling 近似值 tgamma 时的精度,完成了在 1007 中开始的工作。
    • 修复了大型初始猜测的 inverse_discrete_quantile,请参阅 1007
    • 改进了 Newton 求根,请参阅 1000
    • 修复了非零中心的 median_absolute_deviation,请参阅 997
    • 修复了 gcc-14 的 cstdfloat.hpp。
    • 更新为适用于 <stdfloat> 中声明的新类型。
    • 更改 hypergeometric_distribution 以使用 64 位而不是 32 位整数,以避免不必要的溢出和使用限制。
  • Multi-index Containers:
    • 修复了旧编译器中没有 ADL 支持的序列化相关编译时错误(问题 #70)。
  • Multiprecision:
    • 在测试中将 boost::array 更改为 std::array,修复了 567
    • 更正 cpp_int::eval_convert_to 为 noexcept,修复了 553
    • 确保更改全局精度也会更改当前线程精度。
    • 修复了 rational_adaptor 构造错误,修复了 540
  • MySQL:
    • 添加了 connection::reset_connectionconnection::async_reset_connection。这些函数清理会话状态(包括预处理语句、变量、锁等),而无需关闭和重新打开连接。
    • 添加了 MySQL 服务器 v8.1.0 中引入的错误代码。
    • 为反序列化函数添加了模糊测试。
  • PFR:
    • 重大新功能:字段名称反射。添加了新的 constexpr boost::pfr::get_name<N, T>() 函数,该函数返回一个 std::string_view,其中包含聚合 T 中索引 N 处的字段名称。需要 C++20。如果该功能可用,则定义 BOOST_PFR_CORE_NAME_ENABLED 为 1。非常感谢 Denis MikhailovBela SchaumX-Ryl669 的 PR PR#129 和实现思路。
    • C++17 的 for_each_field() 现在是 constexpr。非常感谢 Alexander Karatarakis 的 PR PR#134
  • Predef:
    • 版本 1.15.0
    • 添加了对 Microsoft STL 的检测(来自 Henrik Gaßmann)。
  • Random:
    • 不再支持 C++03。
    • 修复了使用 Boost.Multiprecision 的测试中的溢出
  • Ratio:
    • 不再支持 C++03。
    • 已删除对 BOOST_RATIO_EXTENSIONS 的支持。Ratio 现在根据标准 <ratio> 头文件实现。
  • Stacktrace:
  • System:
    • 添加了对 result<U&, E> 的支持。
    • result 添加了 operator|
    • result 添加了 operator&
    • result 添加了 operator&=
  • Test:
    • 不再支持 C++03。
    • 修复了 glibc 2.2 - 2.17 的 PRIxPTR 的用法 PR#392
    • 修复了 MSVC 警告 C5263:在临时对象上调用 'std::move' 会阻止复制省略 PR#390
  • Thread:
    • 不再支持 C++03。
  • TypeIndex:
    • 不再支持 C++03。
    • BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS((A)(B)(C)(D)) 更改了语法为 BOOST_TYPE_INDEX_REGISTER_RUNTIME_CLASS(A, B, C, D)
    • 删除了 Boost.PP 依赖。
  • TypeOf:
    • 不再支持 C++03。
  • Unordered:
    • 重大更新。
    • 添加了 boost::concurrent_flat_set
    • 为并发容器添加了 [c]visit_while 操作,具有串行和并行变体。
    • 添加了从 boost::concurrent_flat_(map|set)boost::unordered_flat_(map|set) 和反之亦然的高效移动构造。
    • 为并发容器添加了批量访问,以提高查找性能。
    • 添加了调试模式机制,用于检测用户代码非法重入并发容器。
    • 为所有容器及其(非本地)迭代器类型添加了 Boost.Serialization 支持。
    • 添加了对花式指针的支持,以用于开放寻址和并发容器。这使得可以使用 Boost.Interprocess 分配器在共享内存中构造容器等场景成为可能。
    • 修复了封闭寻址容器的本地迭代器的成员指针运算符中的错误 (PR#221,感谢 GitHub 用户 vslashg 发现并修复了此问题)。
    • 从该版本开始,boost::unordered_[multi]setboost::unordered_[multi]map 仅适用于 C++11 及更高版本。
  • variant:
    • 不再支持 C++03 PR#107
    • 删除了 Boost.Move 和 Boost.Bind 依赖。
  • Wave: 修复的错误
    • #188: 当遇到 "#pragma\n" 时出现段错误

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang, C++03: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.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, 15.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, 15.0.0
    • Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
    • GCC, C++03: 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, C++03: 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 和 Glen Fernandes 管理了此版本。