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: <charconv> 在 C++11 中的高质量实现,来自 Matt Borland。
  • Scope: 作用域守卫实用程序和 unique_resource 包装器的集合,来自 Andrey Semashev。

已更新库

  • 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 和检查的删除器定义,以便它们不会将命名空间 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_regularcopy_directorysymbolic_link_existscompletecopy_optionsymlink_option 以及 boost/filesystem/convenience.hppboost/filesystem/path_traits.hpp 头文件已被删除。文档中提到了已删除组件的可能替代品。
    • 默认情况下,现在禁用从容器类型(例如 std::vector<char>)构造、分配和附加 path 的支持。用户仍然可以通过定义 BOOST_FILESYSTEM_DEPRECATED 来启用此功能。此功能仍然已弃用,将在未来的版本中完全删除。
  • Function:
    • 不再支持 C++03;需要 C++11 编译器。(包括 GCC 4.7 或更高版本,以及 MSVC 12.0 (VS 2013) 或更高版本。)
  • Geometry:
    • 改进
      • PR#1247 使用 if constexpr 宏代替条件宏
      • PR#1242 将策略传递给按边排序
      • PR#1234 为 clang/mac/darwin/arm64 添加 cmake 文件
    • 已解决问题
      • #1231, #1244 修复 CCW 多边形的无效集合操作
      • #1259 修复 CUDA NVCC 编译器的编译错误
      • #1250 修复 linestring 的缓冲区返回不正确的内部多边形
      • #1230 修复 union 操作扰乱点并返回错误结果
      • #1229 修复 union 产生自相交
      • PR#1248 通过将闭合簇中的转弯设置为不可遍历来修复缓冲区问题
      • PR#1246 修复转换器和 is_base_of 的编译
      • 各种错误和警告的修复
  • Iterator:
    • 对 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(不要使用来自输入/输出类型的自定义特征,因为它会导致链接时或运行时错误);
      • 修复了错误使用前向声明的 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 的 typeinfo 导致的链接器问题
    • 修复了在使用捆绑了 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
    • 各种错误修复(编译器错误和警告,延迟事件的优先级)
  • Multi-index Containers:
    • 修复了文档错误。
  • Multiprecision:
    • 修复了来自 C++23 <limits> 的弃用警告 PR#575
    • 修复了小位计数的 cpp_bin_float PR#577
    • 修复了 -Wpessimizing-move PR#580
    • 添加了 covecov 运行
    • 减少了 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::query, connection::start_query, connection::execute_statement, connection::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
      • Function
      • 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 提供了关于该问题的信息。
  • STLInterfaces:
    • 在 C++20 及更高版本中,更改了输入迭代器的 iterator_interface 的行为,以更紧密地遵循 C++20 概念。
    • iterator_interface 中删除隐藏友元,以修复关于使用不同约束重新定义概念的错误。
    • 添加了一个新的 v3 内联命名空间,其中包含一个新的 iterator_interface,该接口基于推导 this 而不是 CRTP(C++23 及更高版本)。
    • 添加了 closure::operator() 的右值限定重载,以防止悬空临时对象。
  • Test:
    • 遵守库特定的 _NO_LIB 宏 PR#406
    • 抑制来自 __builtin_unreachable() 在有意无法访问的代码上的 MSVC C4702
    • 修复 boost::function 流式传输错误 PR#411
  • Unordered:
    • 优化了 emplace() 以用于 value_typeinit_type(如果适用)参数,以绕过创建中间对象。该参数已经与可能的中间对象类型相同。
    • 优化了映射容器上用于 k,v 参数的 emplace(),以延迟构造对象,直到确定应插入元素为止。当映射的 key_type 是可移动构造的,或者当 k 参数是 key_type 时,会发生此优化。
    • 修复了对具有显式复制构造函数的分配器的支持(PR#234)。
    • 修复了 const 版本的 unordered_multimap::find(k, hash, eq) 中的错误(PR#238)。
  • Variant:
    • 删除了更多 pre-C++11 宏和解决方法。
  • Wave: 修复了错误
    • #200: 发出的 pragma 缺少终止换行符
    • #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 管理了此版本。