Boost
发布
arrow_drop_down
上一个版本 (1.82.0)
2023年4月14日
依赖项
此版本(在 3 个库中)新增了 4 个依赖项,(在 10 个库中)移除了 17 个依赖项
平台 文件 SHA256 哈希
Unix boost_1_82_0.tar.bz2 a6e1a....97ee6
boost_1_82_0.tar.gz 66a46....6f04c
Windows boost_1_82_0.7z e72ff....37e39
boost_1_82_0.zip f7c9e....7c6d9
Windows (二进制) boost_1_82_0-bin-msvc-all-32-64.7z 592e0....e50fc
boost_1_82_0-msvc-10.0-32.exe 1b643....b7815
boost_1_82_0-msvc-10.0-64.exe 689cc....6eb21
boost_1_82_0-msvc-11.0-32.exe fc319....d24f2
boost_1_82_0-msvc-11.0-64.exe e0451....ac52d
boost_1_82_0-msvc-12.0-32.exe a0a16....1ca1c
boost_1_82_0-msvc-12.0-64.exe dbd19....0bb5f
boost_1_82_0-msvc-14.0-32.exe b581c....1f704
boost_1_82_0-msvc-14.0-64.exe 4fec8....3d461
boost_1_82_0-msvc-14.1-32.exe 36d7f....c2418
boost_1_82_0-msvc-14.1-64.exe 2c17e....69213
boost_1_82_0-msvc-14.2-32.exe 4fb17....e140e
boost_1_82_0-msvc-14.2-64.exe 898a6....5d45e
boost_1_82_0-msvc-14.3-32.exe dcf9d....24d8c
boost_1_82_0-msvc-14.3-64.exe 492b4....5f94f

版本 1.82.0

2023年4月14日 03:08 GMT

文档

已知问题

这些是库作者的补丁,发现太晚,无法在本次发布中修复。

  • Filesystem
    • 由于 OpenBSD 平台上共享库对 -Wl,--no-undefined 编译器标志的支持已损坏,在 OpenBSD 上编译可能会失败,请参见 #283补丁
    • 在 Windows 上,枚举 SMBv1 共享中的目录迭代器可能会因 ERROR_INVALID_LEVEL 错误代码而失败,请参见 #284补丁

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

以下库将在 1.84 版本(即两次发布后)放弃对 C++03 的支持。

  • Align
  • Any
  • Asio
  • Atomic
  • Bind
  • Chrono
  • ContainerHash
  • Conversion
  • DLL
  • Endian
  • Filesystem
  • 函数
  • Functional
  • Io
  • LexicalCast
  • Log
  • Random
  • Ratio
  • SmartPtr
  • 系统
  • Stacktrace
  • Thread
  • Timer
  • TypeIndex
  • Typeof
  • Unordered
  • Variant

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

上述库以及 Boost 大多数库的新的基线要求将是 C++11。由于旧的编译器版本通常只部分实现 C++11,因为缺少支持或存在 bug,所以满足 C++11 要求的编译器可能会因库而异。

然而,一个普遍的规则是,如果一个编译器根本不识别 C++11 关键字或语法(例如,使用 noexceptconstexpr,或者定义一个 =deleted 函数会导致立即编译错误),或者一个编译器根本不提供必需的 C++11 头文件(例如,包含 <atomic><chrono> 失败),或者编译器提供的 C++11 特性或头文件完全不可用,那么这个编译器不被认为是 C++11 编译器。

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

新库

  • Mysql:
    • 一个基于 Boost.Asio 的 C++11 MySQL 数据库服务器客户端,来自 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() 中的歧义。
    • 修复了 awaitable<> 处理包含 std::exception_ptr 的完成签名。
    • 修复了 experimental::channel<>canceltry_send 失败的问题。
    • 修复了线程池为空时 thread_pool::join() 死锁的问题。
    • 修复了使用时管道 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_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_code 使用 source_location
    • tcp_stream 使用定时器的正确执行器。
    • error_categories 使用数字 id
    • file_body 支持 seek
  • ContainerHash:
    • std::nullptr_t 添加了 hash_value 的重载。
    • 添加了 is_tuple_like 和用于类元组类型的 hash_value 重载。
    • 将字符串哈希更改为使用 mulxp1_hash。这提高了质量和速度。
  • Core:
    • 添加了 boost/core/snprintf.hpp 头文件,其中包含 snprintfvsnprintf 及其 wchar_t 对应项的可移植定义。
    • 弃用了 boost/core/is_same.hppboost::core::is_same。该头文件将在未来的版本中移除。建议用户使用 Boost.TypeTraits 或 C++ 标准库类型特征。
    • boost::ref 成员函数和相关方法标记为 noexcept
    • boost::swap 函数标记为 noexcept,具体取决于类型是否支持非抛出交换操作。
    • 添加了 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
  • Filesystem:
    • 修复了可能由 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 )
  • 几何:
    • 主要改进
      • PR#1045 支持 (multi)linestrings 和 (multi)polygons 的地理缓冲区
    • 改进
      • PR#1114 可比距离:添加对动态几何的支持
      • PR#1046 支持 box、几何组合的 covered_by()
    • 已解决的问题
      • #705 WKT:允许制表符和换行符
      • #1109, #1108 联合修复
      • 示例中的各种修复
    • 破坏性更改
      • 空多边形的 WKT 输出表示现在是 POLYGON(),以使其与其它几何图形一致。
  • 直方图:
    • boost::core 中的实现替换了 detail::spandetail::make_span
    • 文档改进
    • 在某些情况下保护 std::minstd::max 的使用,由 Han Jiang 贡献(min,max 宏已被流行的 Windows 头文件非法设置,所以我们需要规避)
    • 添加了测试以在未来捕获库中未受保护的 min,max 令牌的使用。
    • 修复以支持最新的 clang-14 和 gcc-11+ 的推导指南。
  • JSON:
    • set_at_pointer.
    • boost::hash 支持。
    • 调用者提供的序列化器存储。
    • value_to 支持 std::optional 的缺失元素。
    • 修复了转义字符内的解析器挂起。
    • 使 sentinel() 返回一个唯一指针。
  • Locale:
    • get_system_locale 及其依赖项现在将根据 POSIX PR#144 的定义,正确地优先使用 LC_ALL 而不是 LC_CTYPE
    • 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
    • 修复编译器警告
  • 数学:
    • 弃用 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 版本调用编译器时提供更好的错误消息。
  • 多索引容器:
    • Serialization 现在使用 unsigned long 而不是 collection_size_type,并且 multi_index_container serialization 类版本已从 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 安装目标。
    • 修复了 standalone 情况下的 cpp_dec_float 从字符串构造,以获得更好的错误处理,请参见 499
    • 在 C++17 模式下移除冗余定义,请参见 530
    • 修复了 standalone 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#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
    • 改进和错误修复
      • WIN32_LEAN_AND_MEAN 宏重定义警告
      • 比较区分缺失和空的组件
      • 检测带有空端口段的 hier_part_rule
      • 在根之上,段比较(如已规范化)正常工作
      • hier-part path-rootless 考虑无效段
      • 当端口溢出时,port 作为数字设置为 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 管理了此次发布。

贡献者

Peter Dimov
Peter Dimov
贡献者
Matt Borland
Matt Borland
贡献者
John Maddock
John Maddock
贡献者
Christian Mazakas
Christian Mazakas
贡献者
Andrey Semashev
Andrey Semashev
贡献者
Christopher Kohlhoff
Christopher Kohlhoff
贡献者
Alexander Grund
Alexander Grund
贡献者
Vissarion Fisikopoulos
Vissarion Fisikopoulos
贡献者
Joaquin M. López Muñoz
Joaquin M. López Muñoz
贡献者
Klemens Morgenstern
Klemens Morgenstern
贡献者
Glen Fernandes
Glen Fernandes
贡献者
Ion Gaztañaga
Ion Gaztañaga
贡献者
Alan de Freitas
Alan de Freitas
贡献者
Niall Douglas
Niall Douglas
贡献者
Dmitry Arkhipov
Dmitry Arkhipov
贡献者
Denis Mikhailov
Denis Mikhailov
贡献者
Antony Polukhin
Antony Polukhin
贡献者
Emil Dotchevski
Emil Dotchevski
贡献者
Rose
Rose
贡献者
Barend Gehrels
Barend Gehrels
贡献者
Vinnie Falco
Vinnie Falco
贡献者
sdarwin
sdarwin
贡献者
Hans Dembinski
Hans Dembinski
贡献者
Tomasz Kalisiak
Tomasz Kalisiak
贡献者
Christopher Kormanyos
Christopher Kormanyos
贡献者
Brian Wignall
Brian Wignall
贡献者
Nick
Nick
贡献者
NAThompson
NAThompson
贡献者
Drew Risinger
Drew Risinger
贡献者
Francisco Tapia
Francisco Tapia
贡献者
fanquake
fanquake
贡献者
Louis Dionne
Louis Dionne
贡献者
Henrik Gaßmann
Henrik Gaßmann
贡献者
spreadsort
spreadsort
贡献者
Jeff Trull
Jeff Trull
贡献者
Adam Wulkiewicz
Adam Wulkiewicz
贡献者
Mark Santaniello
Mark Santaniello
贡献者
Mikalai Ananenka
Mikalai Ananenka
贡献者
Yuriy Chernyshov
Yuriy Chernyshov
贡献者
Jenkins nedprod CI
贡献者
Flamefire
Flamefire
贡献者
Paul
Paul
贡献者
caozhanhao
caozhanhao
贡献者
Laurent Rineau
Laurent Rineau
贡献者
Chocobo1
Chocobo1
贡献者
Markus F.X.J. Oberhumer
Markus F.X.J. Oberhumer
贡献者
stefan301
stefan301
贡献者
Christian Maurer
Christian Maurer
贡献者
Max Kellermann
Max Kellermann
贡献者
Romain Geissler
Romain Geissler
贡献者
Joel de Guzman
Joel de Guzman
贡献者
Han Jiang
Han Jiang
贡献者
jack
jack
贡献者
Volo Zyko
Volo Zyko
贡献者
Christian Spanier
Christian Spanier
贡献者
Oliver Kowalke
Oliver Kowalke
贡献者
Giuseppe D'Angelo
Giuseppe D'Angelo
贡献者
Bevan Collins
Bevan Collins
贡献者
Marcel Raad
Marcel Raad
贡献者
maximd-g
maximd-g
贡献者
Jeremiah Rodriguez
Jeremiah Rodriguez
贡献者
andre-schulz
andre-schulz
贡献者
Khalil Estell
Khalil Estell
贡献者
pengzhendong
pengzhendong
贡献者
Edward Diener
Edward Diener
贡献者
Baoshuo Ren
Baoshuo Ren
贡献者
Gary Miguel
Gary Miguel
贡献者
chrisse74
chrisse74
贡献者
niXman
niXman
贡献者
Samuel Debione
Samuel Debione
贡献者
Orgad Shaneh
Orgad Shaneh
贡献者
Dunfan Lu
贡献者
Alexey Mednyy
Alexey Mednyy
贡献者
Jan Niklas Hasse
Jan Niklas Hasse
贡献者
Alex Merry
Alex Merry
贡献者
Rene Rivera
Rene Rivera
贡献者
Michael Haubenschild
Michael Haubenschild
贡献者
Matt Galloway
Matt Galloway
贡献者
Samuel Venable
Samuel Venable
贡献者
Jody Hagins
贡献者
Dimitrij Mijoski
Dimitrij Mijoski
贡献者
Edward Nolan
Edward Nolan
贡献者
Dirk Stolle
Dirk Stolle
贡献者
Matthew "strager" Glazar
Matthew "strager" Glazar
贡献者
Gabriel Matte
Gabriel Matte
贡献者
Travers Biddle
Travers Biddle
贡献者
Ivan Efimov
Ivan Efimov
贡献者