Boost C++ 库

……世界上最受推崇和设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码规范

版本 1.81.0

版本 1.81.0

2022 年 12 月 14 日 17:44 格林尼治标准时间

文档

下载
平台文件SHA256 哈希值
unixboost_1_81_0.tar.bz271feeed900fbccca04a3b4f2f84a7c217186f28a940ed8b7ed4725986baf99fa
boost_1_81_0.tar.gz205666dea9f6a7cfed87c7a6dfbeb52a2c1b9de55712c9c1a87735d7181452b6
windowsboost_1_81_0.7zd7bc4e2a2aee374a8c24832cacfed1265680c1e824d09fab3e00f87508155353
boost_1_81_0.zip6e689b266b27d4db57f648b1e5c905c8acd6716b46716a12f6fc73fc80af842e
* 下载链接由来自 C++ 联盟 的资助支持。

新增库

  • URL: 一个仅使用 C++11 解析、修改和打印 URL 的库,由 Vinnie Falco 和 Alan de Freitas 提供。其特点包括快速编译、强大的不变性以及使用内存友好型方法的严格合规性。

更新的库

  • Asio:
    • 添加了consign 完成标记适配器,可用于将附加值附加到完成处理程序。
    • 添加了any_completion_handler<>,可用于类型擦除完成处理程序。
    • 添加了experimental::co_composed,可以使用 C++20 协程实现轻量级用户定义的异步操作。
    • 添加了基于范围的experimental::make_parallel_group() 重载。
    • 添加了any_completion_executor,一个与完成处理程序关联的执行器的类型擦除包装器。
    • 将缺失的context 查询添加到 use_future 的执行器。
    • execution::any_executor<>any_io_executor 添加了无异常构造函数重载。
    • 优化了空execution::any_executor 对象的表示,以提高复制和移动操作的性能。
    • std::reference_wrapper 添加了associated_cancellation_slot 特化。
    • 更改了 I/O 对象,使其通过 const 引用返回其执行器。
    • 更改了关联,以便为所有两个参数的get 函数使用推导的返回类型。
    • 修复了spawn 实现,以捕获未处理的异常并在生成的“线程”外部重新抛出它们。
    • 修复了spawn,以确保完成处理程序通过正确的执行器调度。
    • 修复了终端状态spawn“线程”对象的清理。
    • 修复了spawnco_spawn 实现,以便在正确的执行器上调度取消处理程序。
    • 更改了“调度”的语义,表示执行器按原样使用。
    • 弃用了execution::execute 自定义点和发送方/接收方工具。
    • 添加了一个 C++11parallel_group 示例。
    • 修复了示例代码,使其不使用已弃用的resolve 转换。
    • 修复了experimental::channel_traits 特化中的歧义。
    • R(error_code) 签名添加了一个专门的通道实现。
    • 使cancelled()async_compose“自身”对象上公开。
    • io_executor_typeget_io_executor 添加到async_compose“自身”对象。
    • 修复了 Windows 重叠句柄的release() 实现。
    • experimental::coro 启用了延迟等待,规范化了experimental::use_coro,并修复了分配器处理。
    • 清理了experimental::promise 并将其设为异步操作对象。
    • 限制了post/defer 重载,使其能够要求blocking.never
    • 更改了描述符实现,如果ioctl 在设置非阻塞模式时失败并返回ENOTTY,则回退到fcntl
    • 修复了与使用sprintf 相关的 Xcode 已弃用警告。
    • 修复了在内部线程上运行时传递给select_reactor::run 的参数。
    • 修复了定义BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLING 时的编译错误。
    • 更新了 clang 14 及更高版本上 C++20 协程支持的检测。
    • 更改了标准库功能检测,以便在面向 C++17 或更高版本时始终启用std::invoke_result
    • 修复了使用 MSVC 进行返回类型推导的检测。
    • 更新了异步操作要求,以放宽对关联执行器的要求。
    • 添加了io_uring到实现说明中。
    • 请参阅 修订历史 以了解更多详情。
  • Beast:
    • 添加buffers_generator
    • 添加beast::http::message_generator
    • 添加了buffer_ref,以便 beast 缓冲区可与 asio 一起使用。
    • 支持每个操作的取消
    • C++20 可等待示例。
    • websocket 每消息压缩选项
    • websocket 超时选项 API
    • 多个内容长度错误
    • 支持默认完成和重新绑定
  • 容器哈希:
    • 主要更新。
    • 已删除boost::hash 的特化;它现在始终调用hash_value
    • 已删除对BOOST_HASH_NO_EXTENSIONS 的支持。扩展程序始终启用。
    • 现在支持所有标准容器。这包括std::forward_list 和无序关联容器。
    • 现在开箱即用地支持用户定义的容器(具有返回迭代器的begin()end() 成员函数的类型)。
    • 现在开箱即用地支持描述的结构和类(那些用BOOST_DESCRIBE_STRUCTBOOST_DESCRIBE_CLASS 注释的结构和类)。
    • hash_combine 已改进。
    • 字符串哈希的性能(以及由于上述更改而产生的质量)已得到改进。字符串的boost::hash 现在在 64 位模式下通过了 SMHasher。
    • 文档已大幅修订,以反映这些更改。
  • 核心:
    • empty_value 成员现在标记为constexpr
    • 添加了fclose_deleter,一个在指向std::FILE 的指针上调用std::fclose 的删除器。
    • boost/core/bit.hpp 中的位操作实用程序现在显式要求输入无符号整数。(#129
    • bit_width 现在返回int 而不是输入参数类型的值。这遵循 LWG3656 的决议。
  • 描述:
    • 为了允许在使用选项-pedantic 时包含enumerators.hppbases.hppmembers.hppBOOST_DESCRIBE_ENUM 的调用已从modifiers.hpp 移动到单独的头文件modifier_description.hpp 中。因此,modifiers.hpp 不再包含enum.hpp。依赖于此隐式包含的代码可能会失败,需要修复以包含enum.hpp
  • DLL:
    • 修复了 Windows 平台的path_from_handle 实现,感谢 @SaltfishAmi 提供的错误报告 57
  • 文件系统:
    • 已弃用:v3 中弃用,在v4 中删除了从字符容器(例如std::vector<char>std::list<wchar_t>)构造、赋值和附加path 的操作。请改用字符串类型或迭代器。
    • 已弃用:boost/filesystem/path_traits.hpp 头文件已弃用,并将在未来的版本中删除。该头文件包含path 的实现细节,不应在用户代码中使用。
    • 先前已弃用的 API 现在会在使用时生成编译警告。要抑制这些警告,可以在编译用户代码时定义宏BOOST_FILESYSTEM_ALLOW_DEPRECATED
    • 修复了由于在不支持*at API 的 POSIX 系统上缺少包含文件而导致的编译错误。(#250)
    • 在 Windows 10 之前的版本中,为网络共享文件系统添加了一个解决方法,该文件系统在构造目录迭代器时会产生ERROR_INVALID_PARAMETER错误。(PR#246, #245)
    • 在 Windows 上,修复了如果路径以“\\?\" 前缀开头,则weakly_canonical 会失败并出现ERROR_INVALID_FUNCTION错误代码的问题。(#247)
    • 增加了对std::string_viewboost::string_viewboost::container::string(以及相应的wchar_t对应项)在path构造函数、赋值和追加操作中的支持。(#208)
    • 采用迭代器对的path构造函数、赋值和追加操作将不再接受其值类型不是支持的路径字符类型之一的迭代器。
    • 在 Windows 上,提高了directory_iterator与各种已挂载文件系统和 7.21 之前的 Wine 版本的兼容性。(#255, #266)
    • 在 Windows 上,重复数据删除的文件现在报告为常规文件,而不是重新分析文件。(#262)
  • Fusion:
    • 添加了fusion::identity_view (PR#240)
    • 增加了对fusion::transform_view上的关联序列的支持 (PR#239)
    • 修复了与关联序列一起使用fusion::reverse_view时的编译问题 (PR#237)
    • 修复了 Clang 13 -Wdeprecated-copy 警告 (PR#261)
    • 少量依赖项重组。现在从 Boost.Core 使用boost::refboost::noncopyable (PR#249)
    • 在 Linux 和 MacOS 上添加了针对 clang 和 gcc 的 CI 测试,修复了 Windows 上的 CI 测试 (PR#245, PR#236)
    • 改进文档并修复了错别字 (#234, PR#235, PR#238)
  • Geometry:
    • 已解决的问题
      • #1048 索引:修复当 IndexableGetter 按值返回 Indexable 时悬空引用
      • #1076 并集:在极少数情况下可能会错过一个多边形
      • #1081 并集:由于精度问题,可能会错过内环
    • 错误修复
      • #1063 交集:修复简单球面多边形交集中的错误
      • #1064 公式:修复大地测量直接公式中的一致性问题
      • #1088 点:修复自定义点类型的回归问题
      • 修复了各种缺少包含文件、警告、C++20 编译错误和文档问题
  • Histogram:
    • 主要更新。
    • 添加了新的accumulators::fraction来计算分数、方差和置信区间
    • 为分数添加了区间计算器:utility::clopper_pearsonutility::wilson_intervalutility::jeffreys_intervalutility::wald_interval,它们可以计算具有任意置信水平的区间
    • 添加了utility::confidence_levelutility::deviation类型,分别用于将置信水平作为概率或标准差的倍数传递给所有区间计算器
    • 修复了 C++20 中的内部sub_arrayspan
  • Iterator:
    • function_output_iterator现在支持将赋值的值完美转发到包装的函数对象。(PR#73)
    • 修复了从另一个function_input_iterator的后增量结果构造function_input_iterator的编译问题。(#75)
    • 基于iterator_facade的迭代器后增量的结果现在支持operator->(it++)->foo等效于(*it++).foo,这在之前就已经支持了。
  • JSON:
    • 添加了object::stable_erase
    • 添加了std::istreamparse重载和valueoperator>>
    • value添加了右值引用限定的访问器。
    • 转换特性已重新设计。
    • 增加了对描述的类和枚举、std::optionalstd::variant和空类型(包括std::nullptr_tstd::nullopt_tstd::monotype)的转换支持。
    • 添加了从value到用户类型的非抛出转换。
  • LexicalCast:
    • 修复了转换易失性算术类型时的编译问题。感谢 Giovanni Cerretani 报告的错误 #50
    • 删除了对已弃用头文件的用法。感谢 Michael Ford 的 PR PR#53
  • Locale:
    • 主要更新,包含一些重大更改。
    • 现在需要 C++11 支持,已放弃对 C++03 和更早版本的支持
    • 一些枚举已转换为枚举类——避免名称冲突
    • -sICU_LINK_LOCALE-sICU_LINK替换为 Boost.RegEx 中使用的细粒度配置选项
    • 修复 libiconv 的检测,允许 Boost.Locale 在某些平台上再次构建
    • 删除对std::auto_ptr的用法和支持
    • 使 Windows 上使用wchar_tcodecvt假定/使用 UTF-16 编码
    • 性能改进:使basic_formatdate_timehold_ptr可移动,修复格式缓存的使用
    • 使 Boost.Locale 与更多 ICU 版本兼容(特别是测试)
    • 修复某些类的 RTTI 定义(可见性问题)
    • 修复 ICU 后端与某些 libc++ 版本的兼容性
    • 修复某些运算符的返回值以正确返回非 const *this
    • 修复date_time中年份负向滚动时的整数溢出
    • 处理或抑制许多警告,使构建日志更清晰
    • 添加对更多 Windows 代码页的支持
    • 修复对像 ISO-2022-JP 这样的 Windows 代码页的支持
  • Nowide:
    • 修复 MSVC 上测试的构建失败
  • Stacktrace:
    • 库**不再使用 COM 初始化**。感谢 Alex Guteniev 报告的错误、说明和 PR PR#123
    • 库现在可以在 b2 中检测 libbacktrace 的可用性时使用BOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE宏值,感谢 Ben Gemmill 报告的错误 #115
    • 添加了BOOST_STACKTRACE_BACKTRACE_FORCE_STATIC宏,以便在使用 libbacktrace 时强制使用单个 backtrace_state 静态实例。感谢 Rasmus Thomsen 报告的错误 #118
    • 避免仅包含boost/stacktrace/stacktrace.hpp头文件时出现未解析的引用。感谢 Long Deng 报告的错误 #116
    • 通过不在 Windows 平台上调用strlen来优化堆栈跟踪打印。感谢 Alex Guteniev 报告的错误 #122
  • PFR:
    • 改进了在 C++14 模式下对聚合可初始化对象的检测,感谢 Denis Mikhailov 的 PR PR#97
    • 抑制 clang-tidy 警告,感谢 Alexander Malkov 的 PR PR#109PR#104
    • 如果编译器支持,则使用折叠表达式。感谢 Jean-Michaël Celerier 的 PR PR#96
  • STLInterfaces:
    • 修复了在具有constvalue_type的 C++20 之前的迭代器中,两个格式错误的iterator_interface运算符。
  • System:
    • 现在可以定义宏BOOST_SYSTEM_DISABLE_THREADS来禁用<mutex>的使用(例如,在单线程 libstdc++ 上)。
    • 添加了value_typeerror_typein_place_valuein_place_errorresult<>
    • 添加了emplaceresult<>
  • Unordered:
    • 主要更新。
    • 添加了基于开放寻址的快速容器boost::unordered_flat_mapboost::unordered_flat_set
    • 为所有容器添加了 CTAD 推导指南。
    • 添加了LWG issue 2713中指定的缺失构造函数。
  • Variant:
    • 避免头文件的递归包含,感谢 Nathan Sidwell 报告的错误 #101
    • 删除了对已弃用头文件的用法,感谢 Michael Ford 的 PR PR#96
    • 修复了 C++23 模式下 clang 的编译问题,感谢 Ed Catmur 的 PR PR#98
  • Variant2:
    • 添加了对boost::json::value_fromboost::json::value_to的支持。

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang: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: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: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 负责本次发行。