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`来表示`AF_UNIX`和`SOCK_SEQPACKET`。
    • 通过`signal_set::add`的可选参数暴露了`sigaction()`标志。
    • 更改`allocator_binder`、`executor_binder`和`cancellation_slot_binder`以支持检测未特化的关联器。
    • 修复了`associated_cancellation_slot::get()`中的歧义。
    • 修复了`awaitable<>`对包含`std::exception_ptr`的完成签名的处理。
    • 修复了`cancel`后`experimental::channel<>` `try_send`失败的问题。
    • 修复了线程池没有内部线程时`thread_pool::join()`死锁的问题。
    • 修复了使用 io_uring 时管道`release()`的问题。io_uring.
    • 修复了后端的数据初始化和清理问题。io_uring后端。
    • 修复了`get_associated_executor()`的执行上下文重载中的悬空引用问题。
    • 确保在关闭`experimental::channel<>`时仍然可以接收缓冲消息。
    • 修复了`any_completion_handler`赋值运算符。
    • 限制了`any_completion_handler`的构造函数以防止意外复制
    • 更改为使用`uint64_t`作为 OpenSSL 选项,以匹配 OpenSSL 3。
    • 修复了`deferred`与多个完成签名的互操作性。
    • 修复通道以添加对 C++11 和 C++14 的部分支持。
    • 在等待打包的异步操作时,为`co_composed`和'awaitable<>'协程添加了缺少的处理程序跟踪源位置支持。
    • 修复了一些“潜在的空指针解引用”和影子变量警告。
    • 修复了与`const_buffers_1`和`mutable_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_operation`和`completion_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::storage()`访问器和`atomic::storage_type`类型。建议用户改用`atomic::value()`和`atomic::value_type`。
  • Beast(野兽):
    • 添加`error_code`使用 source_location
    • tcp_stream 使用正确的计时器执行器。
    • 错误类别使用数字 ID
    • `file_body`支持查找
  • ContainerHash(容器哈希):
    • 为`std::nullptr_t`添加了`hash_value`的重载。
    • 添加了`is_tuple_like`和`hash_value`的类元组类型重载。
    • 将字符串哈希更改为使用`mulxp1_hash`。这提高了质量和速度。
  • Core(核心):
    • 添加了`boost/core/snprintf.hpp`头文件,其中包含`snprintf`、`vsnprintf`及其`wchar_t`对应物的可移植定义。
    • 弃用了`boost/core/is_same.hpp`和`boost::core::is_same`。该标头将在未来版本中删除。建议用户改用 Boost.TypeTraits 或 C++ 标准库类型特征。
    • 使用`noexcept`标记了`boost::ref`成员函数和关联方法。
    • 根据类型是否支持非抛出交换操作,使用 noexcept 标记 boost::swap 函数。
    • 添加了 boost::core::launder,它是 std::launder 的可移植实现。
    • 添加了 BOOST_CORE_ALIGNOF,它是 alignof 的可移植实现。
    • 添加了 boost::core::max_align_t,它是 std::max_align_t 的可移植等效项,以及 boost::core::max_align,它是 max_align_t 的对齐方式。
    • 添加了 boost::core::memory_resource,它是 C++17 中 std::pmr::memory_resource 的可移植等效项。
    • 添加了 boost/core/serialization.hpp,这是一个原语集合,允许库为其类型实现 Boost.Serialization 支持,而无需包含 Serialization 头文件,从而使其库不依赖于 Serialization。
    • 添加了 boost::data,它是 std::data 的实现。
    • 添加了 boost::size,它是 std::size 的实现。
    • 更新了 boost::span 以使用 boost::data,这增加了对从 std::initializer_list 进行范围构造的支持。
    • 添加了 boost::identity,它是 std::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):
    • detail::spandetail::make_span 替换为 boost::core 中的实现
    • 文档改进
    • 在某些情况下保护 std::minstd::max 的使用,由 Han Jiang 贡献(流行的 Windows 头文件非法设置了 min、max 宏,因此我们需要解决这个问题)
    • 添加了测试以捕获将来库中未受保护的 min、max 令牌的使用
    • 修复以支持最新的 clang-14 和 gcc-11+ 中的推导指南
  • JSON 库:
    • set_at_pointer.
    • boost::hash 支持。
    • 调用者提供的序列化器存储。
    • 对于 std::optionalvalue_to 支持缺少元素。
    • 修复转义字符内的解析器暂停。
    • 使 sentinel() 返回一个唯一指针。
  • 本地化库 (Locale):
    • get_system_locale 及其依赖项现在将根据 POSIX 的定义正确地优先选择 LC_ALL 而不是 LC_CTYPE PR#144
    • 对于尾随(UTF)代理,utf8_codecvt::out 返回 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 位 long double。
    • 改进 constexpr 数学函数以更好地处理无穷大和 NaN。
    • 使积分器 const 正确。
    • 如果函数下溢,修复 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 库:
    • 添加 convert_string 重载,接受 (std::)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
    • 对文档进行了多项修复和改进。
  • 进程:
    • 为 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 的互操作性
  • 测试:
    • 修复了几个未使用的变量警告
    • 修复了 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
    • 改进和错误修复
      • 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 管理了此次发布。