Boost C++ 库

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

版本 1.82.0

版本 1.82.0

2023 年 4 月 14 日 03:08 GMT

文档

下载
平台文件SHA256 哈希
unixboost_1_82_0.tar.bz2a6e1ab9b0860e6a2881dd7b21fe9f737a095e5f33a3a874afc6a345228597ee6
boost_1_82_0.tar.gz66a469b6e608a51f8347236f4912e27dc5c60c60d7d53ae9bfe4683316c6f04c
windowsboost_1_82_0.7ze72ff100482d4b371327b6c550dbd244d49c0186860ccc3b8c093dd621537e39
boost_1_82_0.zipf7c9e28d242abcd7a2c1b962039fcdd463ca149d1883c3a950bbcc0ce6f7c6d9
* 下载链接由 C++ 联盟的拨款支持。

已知问题

这些是库作者提供的补丁,发现得太晚,无法在此版本中修复。

  • 文件系统
    • 在 OpenBSD 上的编译可能会失败,因为该平台上的共享库对 -Wl,--no-undefined 编译器标志的支持已损坏,请参阅 #283补丁
    • 在 Windows 上,在 SMBv1 共享中创建目录迭代器可能会失败,并显示 ERROR_INVALID_LEVEL 错误代码,请参阅 #284补丁

关于放弃 C++03 支持的通知

以下库将在 1.84 版本(即两个版本之后)中放弃 C++03 支持

  • Align
  • Any
  • Asio
  • Atomic
  • Bind
  • Chrono
  • ContainerHash
  • Conversion
  • DLL
  • Endian
  • 文件系统
  • Function
  • Functional
  • Io
  • LexicalCast
  • Log
  • Random
  • Ratio
  • SmartPtr
  • System
  • Stacktrace
  • Thread
  • Timer
  • TypeIndex
  • Typeof
  • Unordered
  • Variant

此版本 (1.82) 和下一个版本 (1.83) 将是为上述库及其大多数依赖项提供 C++03 支持的最后版本。

上述库以及大多数 Boost 的新基线要求将是 C++11。由于旧编译器版本通常仅部分实现 C++11,原因是缺少支持或存在错误,因此哪些编译器被认为满足 C++11 要求可能因库而异。

但是,一般规则是,如果编译器根本无法识别 C++11 关键字或语法(例如,使用 noexcept,使用 constexpr,或定义 =deleted 函数会导致立即编译错误),或者如果编译器根本不提供所需的 C++11 头文件(例如,尝试包含 <atomic><chrono> 失败),或者编译器提供的 C++11 功能或头文件完全不可用,则此编译器不被视为 C++11 编译器。

例如,这排除了 14.0 之前的 Microsoft Visual C++ 或 4.8 之前的 GCC。

新库

  • Mysql: 基于 Boost.Asio 的 MySQL 数据库服务器的 C++11 客户端,来自 Ruben Perez。

更新的库

  • Any:
    • 现在使用 core/enable_if.hpp 头文件,而不是已弃用的 utility/enable_if.hpp。感谢 Michael Ford 的 PR PR#25
  • Asio:
    • 添加了在操作立即完成时自定义完成处理程序执行的能力。
    • 为缓冲区类型添加了用户定义的字面量。
    • 添加了一个新的协议类型 local::seq_packet_protocol 来表示带有 SOCK_SEQPACKETAF_UNIX
    • 通过 signal_set::add 的可选参数公开了 sigaction() 标志。
    • 更改 allocator_binderexecutor_bindercancellation_slot_binder 以支持检测未专门化的关联器。
    • 修复了 associated_cancellation_slot<reference_wrapper>::get() 中的歧义。
    • 修复了包含 std::exception_ptr 的完成签名的 awaitable<> 处理。
    • 修复了 experimental::channel<>cancel 后的 try_send 失败。
    • 修复了当池没有内部线程时 thread_pool::join() 死锁。
    • 修复了在使用以下内容时的管道 release()io_uring.
    • 修复了以下内容中的数据初始化和清理问题io_uring后端。
    • 修复了 get_associated_executor() 的执行上下文重载中的悬空引用问题。
    • 确保当 experimental::channel<> 关闭时,缓冲的消息仍然可以接收。
    • 修复了 any_completion_handler 赋值运算符。
    • 约束了 any_completion_handler 的构造函数以防止意外复制
    • 更改为对 OpenSSL 选项使用 uint64_t,以匹配 OpenSSL 3。
    • 修复了 deferred 与多个完成签名的互操作性。
    • 修复了通道以添加对 C++11 和 C++14 的部分支持。
    • 当等待打包的异步操作时,为 co_composed 和 'awaitable<>' 协程添加了缺失的处理程序跟踪源位置支持。
    • 修复了一些“潜在的空指针解引用”和阴影变量警告。
    • 修复了与 const_buffers_1mutable_buffers_1 一起使用时 asio::buffer 重载选择。
    • 除非目标是旧版本的 Windows,否则禁用运行时检查当前 Windows 版本。
    • 修复了缓冲流包装器和可移动构造流(例如 ssl::stream<>)之间的兼容性。
    • 修复了 basic_socket_acceptor::async_accept 与具有推导返回类型的 lambda 的兼容性。
    • 修复了 as_tuple 与旧式完成令牌的兼容性。
    • 修复了 redirect_error 与新完成令牌的兼容性。
    • 修复了由于本应允许从析构函数中转义的异常而导致的潜在的 Windows 特定程序终止。
    • 防止意外的布尔表达式 co_await
    • 修复了 experimental::use_coro 中对自定义分配器的结果处理和支持。
    • 修复了 is_async_operationcompletion_signature_of 的可变参数模板模拟。
    • 修复了 experimental::promise 中移动后的结果的错误重用。
    • 修复了 experimental::coro 与自定义分配器的使用。
    • 修复了 Windows 上面向流的文件的 seek_cur 行为。
    • 对文档进行了各种添加和修改。
    • 有关更多详细信息,请参阅修订历史
  • Atomic:
    • 当为支持 AVX 的 x86 目标编译时,向量指令现在用于 128 位原子加载和存储。
    • 对于 32 位 x86 目标,具有 memory_order_seq_cst 语义的 64 位原子加载和存储现在将发出内存排序指令。
    • 删除了在 Boost.Atomic 1.73 中已弃用的 atomic<T>::storage() 访问器和 atomic<T>::storage_type 类型。建议用户改用 atomic<T>::value()atomic<T>::value_type
  • Beast:
    • 添加 error_codes 使用 source_location
    • tcp_stream 使用计时器的正确执行器。
    • error_categories 使用数字 ID
    • file_body 支持 seek
  • ContainerHash:
    • std::nullptr_t 添加了 hash_value 的重载。
    • 为类似元组的类型添加了 is_tuple_likehash_value 的重载。
    • 将字符串哈希更改为使用 mulxp1_hash。这提高了质量和速度。
  • Core:
    • 添加了带有 snprintfvsnprintf 及其 wchar_t 对等项的可移植定义的 boost/core/snprintf.hpp 头文件。
    • 弃用了 boost/core/is_same.hppboost::core::is_same。该头文件将在未来版本中删除。建议用户改用 Boost.TypeTraits 或 C++ 标准库类型特征。
    • noexcept 标记了 boost::ref 成员函数和关联方法。
    • noexcept 标记了 boost::swap 函数,具体取决于该类型是否支持非抛出 swap 操作。
    • 添加了 boost::core::launderstd::launder 的可移植实现。
    • 添加了 BOOST_CORE_ALIGNOFalignof 的可移植实现。
    • 添加了 boost::core::max_align_tstd::max_align_t 的可移植等效项,以及 boost::core::max_alignmax_align_t 的对齐方式。
    • 添加了 boost::core::memory_resource,来自 C++17 的 std::pmr::memory_resource 的可移植等效项。
    • 添加了 boost/core/serialization.hpp,一组原语,允许库为其类型实现 Boost.Serialization 支持,而无需包含 Serialization 头文件,从而使库依赖于 Serialization。
    • 添加了 boost::datastd::data 的实现。
    • 添加了 boost::sizestd::size 的实现。
    • 更新了 boost::span 以使用 boost::data,它添加了对从 std::initializer_list 进行范围构造的支持。
    • 添加了 boost::identitystd::identity 的实现。此工具已从 Boost.Functional 移动。
  • DLL:
    • 避免从 size_t 到 uint32_t 的隐式转换,感谢 Travers Biddle 的 PR PR#57
  • 文件系统:
    • 修复了由于 path 转换构造函数对接受的参数过于宽松而可能导致的编译错误。 (#273)
    • v4: path::remove_filename 现在保留了尾部目录分隔符。 (#271)
    • 添加了 path::remove_filename_and_trailing_separators,它从路径中删除文件名和前面的目录分隔符。此行为类似于 Filesystem v3 中的 path::remove_filename,但也适用于 v4
    • 添加了 path::replace_filename,它替换路径中的文件名。
    • 更新了库版本选择的实现,以避免 ODR 违规。 (#279)
    • 在 Windows 上,为查询 SMBv1 共享中文件的文件属性添加了一个解决方法。以前,SMBv1 共享中的目录可能被报告为常规文件。这不影响 SMBv2 或更高版本。 (#282)
  • Geometry:
    • 重大改进
      • PR#1045 支持地理缓冲区,用于(多)线串和(多)多边形
    • 改进
      • PR#1114 可比较距离:添加对动态几何图形的支持
      • PR#1046 支持 box、geometry 组合的 covered_by()
    • 已解决的问题
      • #705 WKT:允许制表符和换行符
      • #1109, #1108 修复了 union
      • 示例中的各种修复
    • 破坏性更改
      • 空多边形的 WKT 输出表示现在是 POLYGON(),使其与其他几何图形保持一致
  • Histogram:
    • boost::core 中的实现替换 detail::spandetail::make_span
    • 文档改进
    • 在某些情况下保护 std::minstd::max 的用法,由 Han Jiang 贡献(流行的 Windows 头文件非法设置了 min,max 宏,因此我们需要解决)
    • 添加了测试以捕获将来库中未受保护的 min,max 令牌的用法
    • 修复了对最新 clang-14 和 gcc-11+ 中的推导指南的支持
  • JSON:
    • set_at_pointer.
    • boost::hash 支持。
    • 调用方提供的序列化器存储。
    • value_to 支持 std::optional 的缺失元素。
    • 修复了解析器在转义字符内的暂停。
    • 使 sentinel() 返回一个唯一指针。
  • Locale:
    • get_system_locale 和依赖项现在将正确地优先选择 LC_ALL 而不是 POSIX 定义的 LC_CTYPE PR#144
    • utf8_codecvt::out 为尾部 (UTF) 代理返回 partial
    • 添加 boost::locale::util::locale_data 以解析区域设置
    • boost::locale::info::encoding() 结果现在以大写形式显示,如文档中所述,例如 “UTF-8” 而不是 “utf-8”
    • 支持 M49 国家/地区代码,例如 en_001en_150 PR#148
    • en_US_POSIX 视为 C 区域设置的别名 PR#148
    • 改进了缺少分段支持(即没有 ICU)的错误 PR#149
    • 修复编译器警告
  • Math:
    • 已弃用 C++11 支持:我们现在要求 C++14 作为最低标准。我们最低测试的编译器版本现在是 Clang-5、GCC-5 或 MSVC-14.1。
    • 添加了用于多项式求值的 Estrin 方法。
    • 修复了非中心分布中的各种问题,以允许更大的非中心性,请参阅 939
    • 添加了 CMake 安装目标。
    • 修复了 special_functions.hpp 以禁用任何无法在无异常环境中使用的内容。
    • 使条件数计算在 C++14 中工作。
    • 修复了 constexpr 表驱动函数,以避免在代码实际上不是 constexpr 时速度大幅下降,请参阅 923
    • 改进了 tanh_sinh 边界处理,请参阅 894
    • 添加了 Linux arm64、s390x 和 Apple M1 测试,修复了测试用例以处理 128 位长双精度浮点数。
    • 改进了 constexpr 数学函数,以更好地处理无穷大和 NaN。
    • 使积分器符合常量正确性。
    • 修复了 tanh_sinh 积分器在函数下溢的情况,请参阅 898
    • 不要使用 std::cbrt,因为某些平台仍然不支持它。
    • 阻止非中心 T 引发虚假的 FE_INVALID 异常,请参阅 892
    • 修复了二项分布边缘情况。
    • 改进了 ibeta 对非常小参数的处理,请参阅 884
    • 改进了 ibeta 对无穷大和 NaN 的处理,请参阅 878
    • 改进了 powm1 中的错误处理,请参阅 781
    • 改进了求根器括号,以便在指数超大或超小时更快地进行括号。
    • 修复了求根边缘情况,请参阅 873
    • 许多杂项警告修复。
    • 在使用需要 C++17 的功能时添加断言,以便在较低 std 版本中调用编译器时提供更好的错误消息。
  • Multi-index Containers:
    • 序列化现在使用 unsigned long 而不是 collection_size_type,并且 multi_index_container 序列化类版本已从 2 提升到 3 以反映此更改。对于特殊处理 collection_size_type 值的自定义存档类型,读取旧存档可能会失败:如果发生这种情况,请全局定义宏 BOOST_MULTI_INDEX_ENABLE_SERIALIZATION_COMPATIBILITY_V2 以确保读取操作的向后兼容性。
    • 维护工作。
  • Multiprecision:
    • 已弃用 C++11 支持:我们现在要求 C++14 作为最低标准。我们最低测试的编译器版本现在是 Clang-5、GCC-5 或 MSVC-14.1。
    • 添加了新的前向声明头文件。
    • 更新了 Eigen 互操作性,因此我们不再依赖 Eigen 的详细信息,请参阅 479
    • 添加 Cmake 安装目标。
    • 修复了 cpp_dec_float 从独立情况下的字符串构造,以获得更好的错误处理,请参阅 499
    • 在 C++17 模式下删除冗余定义,请参阅 530
    • 修复了独立 itrunc 和 ltrunc 中的错误处理。
    • 修复了在解析八进制字符串时可能未初始化的存储。
    • 添加 arm64 和 s390x CI 测试。
    • powm 添加了一些缺失的表达式模板解包代码,请参阅 506
  • Nowide:
    • 添加接受 (std::)string 实例的 convert_string 重载
    • quoted 添加到输出(带引号的 UTF-8)路径 (std::filesystemboost::filesystem) 到流 PR#170
  • PFR:
    • 实现了 boost::pfr::is_implicitly_reflectable 和用于将聚合专门化为可反射或不可反射的机制,感谢 Denis Mikhailov 的 PR PR#111
    • 实现了 boost::pfr::get,按聚合中元素的类型获取。
    • 实现了 BOOST_PFR_ENABLED 宏以检测库对反射的支持,感谢 Denis Mikhailov 的 PR PR#86
    • 修复了缺失的终止字符,感谢 Denis Mikhailov 的 PR PR#114
    • 修复了旧编译器上 boost/pfr/config.hpp 的编译,感谢 Denis Mikhailov 的 PR PR#118
    • 修复了旧编译器中损坏的 C++17 结构化绑定的解决方法,感谢 Denis Mikhailov 的 PR PR#119
    • 避免 -Wzero-as-null-pointer-constant 警告,感谢 Markus F.X.J. Oberhumer 的 PR PR#117
    • 修复了多个拼写错误,感谢 Denis Mikhailov 的修复。
    • 添加了缺失的 #pragma once,感谢 caozhanhao 的 PR PR#121
    • 对文档进行了多次修复和改进。
  • Process:
    • 在 V2 中添加了对外部进程的管理(仍处于实验阶段)
    • 弃用了 V1 中的 wait_forwait_until - 它们将在未来版本中删除!
  • Stacktrace:
    • 修复了文档和注释中的拼写错误,感谢 Chocobo1 的 PR PR#132
    • 如果定义了 BOOST_STACKTRACE_BACKTRACE_FORCE_STATIC,则修复了 backtrace_create_state 的多线程标志检测。
  • StaticString:
    • Boost.Core string_viewstd::string_view 互操作性
  • Test:
    • 修复了几个未使用的变量警告
    • 修复了 sprintf 弃用警告
    • 修复了 basic_cstring::rfind 中的未定义行为
    • 通过 Github Actions 添加了 CI
  • Unordered:
    • 重大更新。
    • 添加了基于节点的开放寻址容器 boost::unordered_node_mapboost::unordered_node_set
    • 按照 P2363 中的规定,将异构查找扩展到更多成员函数。
    • 用基于常数扩展乘法的新算法替换了开放寻址容器的先前混合后过程。
    • 修复了内部 emplace 实现中的错误,其中堆栈局部类型未使用容器的分配器正确构造,这破坏了 uses-allocator 构造。
  • URL:
    • 添加了带有自动百分比编码的 url::format
    • URL 路由器示例
    • set_params 便利函数
    • 支持隐式转换为 string_view
    • 解析构造函数是隐式的
    • string_token::arg 具有虚拟析构函数和切片保护
    • 支持 BOOST_URL_DISABLE_THREADS
    • 改进和 Bug 修复
      • WIN32_LEAN_AND_MEAN 宏重新定义警告
      • 比较区分不存在和空的组件
      • 检测带有类似空端口段的 hier_part_rule
      • 段比较,如同规范化在根目录之上工作一样
      • hier-part path-rootless 考虑无效段
      • 当端口溢出时,端口作为数字设置为 0
      • ipv4 到字符串溢出检测算法
  • Variant:
    • 现在使用 core/addressof 而不是已弃用的 utility/addressof。感谢 Michael Ford 的 PR PR#105

更新的工具

已测试的编译器

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