Boost C++ 库

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

版本 1.85.0

版本 1.85.0

2024年4月15日 17:38 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_85_0.tar.bz27009fe1faa1697476bdc7027703a2badb84e849b7b0baad5086b087b971f8617
boost_1_85_0.tar.gzbe0d91732d5b0cc6fbb275c7939974457e79b54d6f07ce2e3dfdd68bef883b0b
windowsboost_1_85_0.7z16d16b9658753117c1434e5450c5eac194957f4b6d0b390b9d07900d37c115a4
boost_1_85_0.zipe712fe7eb1b9ec37ac25102525412fb4d74e638996443944025791f48f29408a
* 下载链接由 C++ 联盟 的资助支持。

已知问题

这些是库作者提供的补丁,由于时间太晚,无法在此版本中修复。

  • 容器
    • 由于库中的未定义行为(UB),flat_map/multimap 容器在某些编译器中可能会崩溃或返回无效结果,请参阅 #273补丁

新库

  • Charconv: Matt Borland 提供的 C++11 中 <charconv> 的高质量实现。
  • Scope: Andrey Semashev 提供的作用域保护工具集合和一个 unique_resource 包装器。

更新的库

  • Asio:
    • 修复了 async_result 主模板的概念检查,以正确处理左值限定的完成签名。
    • 修复了使用 bind_allocatorbind_executorbind_immediate_executorbind_cancellation_slot 完成令牌适配器相互适配时可能出现的一些编译错误。
    • 更改了 experimental::ranged_parallel_group 操作,以便在调用完成处理程序时移动 completion_order 向量。
    • 修复了关于 ip::basic_resolver_queryio_context::strandcoroutine 上已弃用的隐式复制构造函数的一些警告。
    • 更新了用于初始化 Winsock 的版本规范。
    • 修复了 co_spawn,以正确地将由取消操作产生的异常传播到完成处理程序。
    • 添加了对 std::launder 的调用,以修复 awaitable<> 内部存储中的未定义行为。
    • 在 Windows 文件支持的实现中,添加了对 file_base::append 标志的缺失处理。
    • 更新了套接字和描述符的实现,以增加在调用 ioctl 失败时回退到 fcntl 的情况。
    • 修复了boost/asio/experimental/parallel_group.hpp头文件,使其是自包含的。
    • 修复了当通道和 experimental::coro 在同一翻译单元中使用时发生的编译错误。
    • 向文档添加了缺失的 CancellationSlot 类型要求。
    • 修复了异步操作的启动函数的推断返回类型的文档超链接。
    • 其他次要的文档更新。
  • Atomic:
    • 添加了对 RISC-V 上 pause 指令的支持。(PR#65
  • Beast:
    • API 更改
      • 状态代码列表已更新,以符合 IANA 注册表。
    • 修复
      • buffers_cat.hpp 中无法访问的代码警告。
      • websocker_server_awaitable 示例中的连接错误处理。
      • 高级服务器示例中对 async_write 的并发调用。
      • zlib 名称与 minizip 冲突。
      • 主机字符串应在 SSL_set_tlsext_host_name() 之后更新。
    • 改进
      • asio::associator 专用于 bind_wrapperbind_front_wrapper
      • 为错误类别消息函数添加非分配重载。
    • 文档
      • 指定何时调用 http::message::prepare_payload() 是可选的。
      • basic_stream::expires_after() 影响的操作。
      • teardown()async_teardown() 是自定义点。
      • 第一次使用后移动或复制 http::serializer 是未定义行为。
      • websocket::permessage_deflate 应在执行 WebSocket 握手之前进行配置。
      • http 读取操作中的 bytes_transferred 报告 HTTP 解析器消耗的字节数。
    • 致谢
      • Emile Cormier, JohannesWilde, yhzx233
  • Bimap:
    • 修复了侧集合的异构查找(PR#42)。
  • Bind:
    • 不再支持 C++03;需要 C++11 编译器。(这包括 GCC 4.7 或更高版本,以及 MSVC 12.0(VS 2013)或更高版本。)
  • Conversion:
    • 删除了已过时的对 boost::lexical_cast 的提及,该函数不再是库的一部分。感谢 Danil Sidoruk 的 PR PR#28
  • Core:
    • 添加了一个新的 boost/core/functor.hpp 头文件,其中包含一个 functor 类模板,用于将原始函数包装到函数对象类中。
    • 更改了 null_deleterfclose_deleter 和 checked deleter 的定义,以便它们不会将命名空间 boost 带入参数依赖查找。用户可能需要显式限定所调用函数的命名空间或添加 using 声明。
  • Filesystem:
    • path::generic_pathpath::generic_string 方法现在会删除返回路径中的重复目录分隔符。
    • v4: path::generic_pathpath::generic_stringpath::make_preferredpath::lexically_normal 避免在路径根名称中转换反斜杠和正斜杠。例如,在 Windows 上,path("\\\\\\\\?\\\\c:\\\\foo").generic_string() 现在返回 "\\?\c:/foo" 而不是 "//?/c:/foo"。类似地,path("\\\\\\\\host/share/foo/..").lexically_normal() 现在返回 "\\host\share"。
    • v4: 如果路径都不存在,equivalent 现在指示错误。
    • v4: 当输入路径具有空的 relative_path() 时,absolute 现在返回带有尾部目录分隔符的路径。(#301
    • 添加了一个 unique_path 重载,它接受单个 error_code& ec 参数。重载使用默认路径模型生成唯一路径。
    • 如果输入路径是相对路径且不包含文件系统中存在的任何元素,则 weakly_canonical 现在会生成绝对路径。(#300
    • copy_filecopy 操作添加了一个新的 copy_options::ignore_attribute_errors 选项。新选项允许忽略复制文件属性时可能出现的错误。(#179
    • 在 Linux 上,基于 sendfilecopy_file_range 系统调用的 copy_file 后端将尝试为目标文件预分配存储空间。这可以减少文件系统碎片,并在可用空间不足时提供早期错误指示。并非所有文件系统都支持此功能;如果不支持存储预分配,则文件复制将继续进行。
    • 在支持 fdopendiropenat 和 POSIX.1-2008 中定义的相关 API 的 POSIX 系统上,以及在 Windows 上,recursive_directory_iterator 现在使用文件描述符/句柄而不是路径来查询文件状态并在迭代期间打开嵌套目录。这使得目录迭代更能抵抗文件系统的并发修改。
    • 移除了之前声明为已弃用的 API。特别是,pathrecursive_directory_iterator 成员函数,is_regular, copy_directory, symbolic_link_exists, complete, copy_option, symlink_option,以及 boost/filesystem/convenience.hppboost/filesystem/path_traits.hpp 头文件已被移除。文档中提到了被移除组件的可能替代方案。
    • 默认情况下,禁用从容器类型(例如 std::vector<char>)构造、赋值和追加 path 的功能。用户仍然可以通过定义 BOOST_FILESYSTEM_DEPRECATED 来启用此功能。此功能仍然是已弃用的,并将在未来的版本中完全删除。
  • 函数:
    • 不再支持 C++03;需要 C++11 编译器。(这包括 GCC 4.7 或更高版本,以及 MSVC 12.0(VS 2013)或更高版本。)
  • 几何:
    • 改进
      • PR#1247 使用 if constexpr 宏代替条件宏
      • PR#1242 将策略传递给按边排序
      • PR#1234 为 clang/mac/darwin/arm64 添加 cmake 文件
    • 已解决的问题
      • #1231, #1244 修复 CCW 多边形无效的集合操作
      • #1259 修复 CUDA NVCC 编译器编译错误
      • #1250 修复线串的缓冲返回错误的内部多边形
      • #1230 修复联合操作扰动点并返回错误结果
      • #1229 修复联合操作产生自相交
      • PR#1248 通过将闭合集群中的转弯设置为不可遍历来修复缓冲区问题
      • PR#1246 修复转换器和 is_base_of 的编译
      • 各种错误和警告的修复
  • 迭代器:
    • 对 C++03 的支持已弃用,并将在未来的版本中删除。
  • JSON:
    • 现在使用 Boost.Endian 来处理字节序。
    • Boost.System 和 Boost.Container 组件的别名已弃用,并且将在 1.87.0 版本中完全删除
    • 描述类的转换支持私有成员。
    • visit 的右值引用重载。
    • 添加对类路径类型的转换支持。
    • 解析到描述类中正确考虑了继承的成员。
    • 禁用自引用序列的转换。
    • 修复了 visit 中的引用处理。
  • LEAF:
    • 用于在线程之间传输错误对象和异常的新 API:try_capture_all
    • result<T> 能够传输通过 try_capture_all 捕获的异常。
    • result<T> 以更高的效率传输动态捕获的错误对象。
    • 旧的 make_shared_context/capture API 已弃用,将在下一个版本中删除。
    • 删除了对在异常中传输动态捕获的错误对象的支持。
  • LexicalCast:
    • 对内部逻辑进行了重大重写,以分离优化和基于 C++ 标准库 IO 的流
      • 基于 C++ 标准库的流现在在较少的情况下构造,从而带来更好的性能
      • 更少的模板实例化和更简单的代码;
      • 始终使用 std::char_traits(不要使用来自输入/输出类型的自定义 traits,因为它会导致链接时或运行时错误);
      • 修复了对前向声明的 boost::array 的误用(感谢 13steinj 的报告 #64!);
      • 按照 C++ 标准库的趋势,删除了对 volatile 输入类型的支持。
    • 优化了从 std::basic_string_view 和 boost::basic_string_view 的转换 #30
    • 删除了对 Boost.NumericConversion 和 Boost.MPL 的依赖。修复了一些将浮点类型转换为算术类型的情况。
    • 该库现在使用 -fno-sanitize-recover=integer #45 编译并正常工作。
  • Locale:
    • 修复了 C++20 模式下由于 char8_t 缺少类型信息导致的链接器问题
    • 修复了使用带有捆绑 IConv 的 ICU 时的 IConv 编译标志
    • collator 现在在构造时(如果存在的话)抛出异常,如文档所述
    • collator 不再从 std::collator 派生,以避免在当前后端不可用时可能出现的类型混淆 PR#216
    • 当检测到错误的 IConv 库时(例如在某些 MacOS 版本上)抛出异常,而不是无限循环 PR#218
    • date_time 的分辨率降低到秒,因为毫秒不容易获得,导致混淆 #221
  • Math:
    • 添加了一个新的优化算法集合
    • 修复 NCF 生存函数中的除以 0 警告
    • 修复 ccmath::floor/ceil 对于大参数的 constexpr 深度限制失败
    • 提高 quartic_roots 的精度
    • 修复 libstdc++14 的 cstdfloat 数值限制检测宏
    • 修复在使用 C++14 时,MSVC UCRT 在 complex.h 中定义 _Complex_I 的问题 PR#1060
    • 改进 cstdfloat iostream PR#1066
    • 修复在非独立环境中以独立模式使用时,Boost.Config 宏的重新定义
    • 代码覆盖率的重大改进以及相关的错误修复
  • MSM:
    • 重大更新。后端更新 (back11)。需要 C++ 11。文档现在将其用作默认值。
    • 大的新功能。新的前端 (PlantUML)。需要 C++ 20
    • 各种错误修复(编译器错误和警告,延迟事件的优先级)
  • 多索引容器:
    • 修复了文档错误。
  • 多精度:
    • 修复 C++23 <limits> 的弃用警告 PR#575
    • 修复小比特计数的 cpp_bin_float PR#577
    • 修复 -Wpessimizing-move PR#580
    • 添加 covcov 运行
    • 减少 cpp_dec_float 乘法中的截断 PR#585
    • 修复 complex_adaptor 以匹配精度要求 PR#597
    • 修复 tommath 中的重大更改 PR#603
    • 修复可以转换为数字的类型参与算术运算符重载的问题 #608
  • MySQL:
    • 重大更改:Boost.MySQL 现在需要链接到新的已编译的 Boost.Charconv 库。这解决了区域设置依赖问题,提高了效率,并为新的客户端 SQL 格式化功能提供支持。
    • 添加了对连接池的实验性支持,它允许重用会话并提供内置的重新连接和错误处理。
    • 添加了对类型擦除连接any_connection 类)的实验性支持。any_connection 不是模板,并且具有更简单的连接建立和重新连接语义。
    • 添加了对客户端 SQL 格式化函数format_sqlformat_sql_to)的实验性支持。这些允许安全地在客户端组合查询,从而启用诸如批量插入、动态过滤器或类似 PATCH 的更新之类的模式。
    • 修复了影响 close_statementasync_close_statement 的性能问题,该问题可能导致应用程序代码中出现重大延迟。
    • 添加了对使用 BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT 构建的支持。
    • 已弃用的执行接口(connection::queryconnection::start_queryconnection::execute_statementconnection::start_statement_execution 及其异步对应项)现在会触发警告,因为它计划在 Boost 1.86 中删除。
    • 修复了导致某些错误消息被截断的错误。
    • 警告清理。现在使用 -Wall-Wextra 构建时,构建没有警告。
    • 所有 field_view 构造函数现在都是稳定的。
    • 该库的内部结构已使用 sans-io 方法重写以降低复杂性。
  • Odeint:
    • 重大更改:该库现在显式需要 C++14,而不是通过包含 Boost.Math 隐式需要
    • 修复了与 Thrust 1.10.0 的兼容性
    • 删除了 C++03 Boost 组件
      • Array
      • Bind
      • 函数
      • Static_assert
  • PFR:
    • boost::pfr::get_name 现在可以在某些编译器上使用局部类型。感谢 Bela Schaum 的 PR PR#152
    • 删除了未使用的实现细节。感谢 Denis Mikhailov 的 PR PR#154
    • 允许从 boost::pfr::structure_to_tuple 抛出异常。感谢 Denis Mikhailov 的错误报告 #155
    • 字段反射技巧现在在文档中进行了描述。感谢 #150 中的所有讨论参与者!
  • Random:
    • 添加 splitmix64 PRNG PR#89
  • System:
    • 不再支持 C++03;需要 C++11 编译器。(这包括 GCC 4.8 或更高版本,以及 MSVC 14.0 (VS 2015) 或更高版本。)
    • 已删除已弃用的头文件 boost/system/cygwin_error.hpp
    • 不再支持原始且过时的(32 位)MinGW。仍然支持 MinGW-w64(64 位和 32 位)。
    • operator& 现在适用于 result<void>(通过采用一个空函数)。
    • result 添加了 operator|=
  • Stacktrace:
    • 重大新功能:来自任意异常的堆栈跟踪。在某些 POSIX 平台上,std::stacktrace::from_current_exception() 现在会返回当前异常对象的堆栈跟踪,就像在抛出异常的位置捕获堆栈跟踪一样。非常感谢 Andrei Nekrashevich 在 libsfe 中对该想法进行原型设计。
    • 修复了 Windows 上使用 boost_stacktrace_windbg 时的内存消耗问题。感谢 ycyclop 报告此问题 #111,感谢 Thiago A. Correa 提供更多信息,感谢 Andrei Karpovskii 提供可能的修复方案。
    • 修复了使用非隐藏可见性构建库的问题。感谢 Jan Bouwer 的报告和关于如何修复此问题的信息。
    • 在文档中添加了一个关于异步信号安全性的单独章节。非常感谢 tworonix#131 中强调了这个问题,并感谢 itrofimow 提供了关于此问题的信息。
  • STL接口:
    • 更改了 C++20 及更高版本中 iterator_interface 对于输入迭代器的行为,以更密切地遵循 C++20 的概念。
    • iterator_interface 中删除了隐藏友元,以修复关于使用不同约束重新定义概念的错误。
    • 添加了一个新的 v3 内联命名空间,其中包含一个新的基于 deducing this 而不是 CRTP 的 iterator_interface(C++23 及更高版本)。
    • 添加了一个 closure::operator() 的右值限定重载,以防止悬空临时对象。
  • 测试:
    • 尊重库特定的 _NO_LIB 宏 PR#406
    • 抑制 MSVC C4702,该警告来自有意无法访问的代码上的 __builtin_unreachable()
    • 修复 boost::function 流式传输错误 PR#411
  • 无序:
    • 优化了 emplace() 对于 value_typeinit_type(如果适用)参数,以绕过创建中间对象。该参数已经与将要创建的中间对象类型相同。
    • 优化了 emplace() 对于 map 容器上的 k,v 参数,以延迟构造对象,直到确定应该插入元素。当 map 的 key_type 是可移动构造的,或者当 k 参数是 key_type 时,会发生此优化。
    • 修复了对具有显式复制构造函数的分配器的支持 (PR#234)。
    • 修复了 const 版本的 unordered_multimap::find(k, hash, eq) 中的错误 (PR#238)。
  • 变体:
    • 移除了更多 C++11 之前的宏和变通方法。
  • Wave: 修复的 Bug
    • #200: 发出的编译指示缺少结尾换行符
    • #202: 在 BOOST_WAVE_BSIZE 边界上调用 fill 时,YYMARKER 未更新

更新的工具

测试的编译器

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 管理了这个版本。