Boost C++ 库

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

版本 1.73.0

版本 1.73.0

2020年4月28日 03:57 GMT

文档

下载
平台文件SHA256 哈希
unixboost_1_73_0.tar.bz24eb3b8d442b426dc35346235c8733b5ae35ba431690e38c6a8263dce9fcbb402
boost_1_73_0.tar.gz9995e192e68528793755692917f9eb6422f3052a53c5e13ba278a228af6c7acf
windowsboost_1_73_0.7zd2e7501bb04fe7abc09aa93f013ae997604286a882da1bd36ddd96ea1163ea71
boost_1_73_0.zip0909a79524f857ef54570ceef8f397cc0629202532cc997785479c7c08bbc2a4
* 下载链接由 C++ 联盟 的资助支持。

已知问题

这些是库作者提供的补丁,发现得太晚以至于无法在发布版本中修复。请注意,它们尚未经过正常的测试流程。

新库

  • Nowide: Windows 上具有 UTF-8 API 的标准库函数,来自 Artyom Beilis。
  • StaticString: 具有编译时固定容量和连续嵌入式存储的字符动态可调整大小的字符串,来自 Vinnie Falco 和 Krystian Stasiowski

更新的库

  • Align:
    • 更新 aligned_alloc 以支持较旧的 mingw32。
  • Any:
    • 通过不包含 <algorithm> 来加速编译。
    • 维护工作,包括 CI 强化。
  • Asio:
    • 修复了与 C++20 概念语法的兼容性。
    • 将 POSIX 描述符类的移动构造函数标记为 noexcept
    • 添加了 ssl::host_name_verification 类,它是 ssl::rfc2818_verification 的直接替代品。ssl::rfc2818_verification 类已被标记为已弃用。由于此更改,SSL 支持现在依赖于 OpenSSL 1.0.2 中引入的函数。
    • 添加了一个 ssl::context 构造函数来获取本机句柄的所有权。
    • 使用以下方法更改了 C++ 语言版本检测gcc使用 __cplusplus 宏。
    • 修复了端点的异步解析操作中的工作计数问题。
    • 修复了 strand<> 转换构造函数和赋值运算符。
    • 确保在 fork 后正确重启解析器。
    • 修复了与当前 NetBSD 版本的兼容性。
    • 移除了一些 async_read 重载中多余的处理程序需求检查。
    • 更改了 ssl::context 类以传播来自 add_certificate_authority 函数的非 EOF 错误。
    • 修复了 Windows 特有的 thread_pool 析构函数挂起问题,该问题在池具有关联的 I/O 对象时发生。
    • 更改了select反应器以在出错时重新创建“自管道技巧”套接字。这解决了 Windows 某些版本上的一个问题,在这些版本上,这些套接字在系统睡眠后断开连接。
    • 修复了由于 C++98 中缺少引用折叠而导致的缓冲流中的编译错误。
    • 更改了 priority_scheduler 示例以演示对 shutdown()destroy() 的调用。
    • 移除了一些不必要的空指针检查。
    • 更改了 Windows 平台检测以将 TV 标题识别为 Windows 应用程序。
    • 添加了一些 emscripten 兼容性补丁。
    • 修复了 use_awaitable_t::as_default_on 函数中的编译错误。
    • 将所有 boost.bind 占位符的使用更改为使用 boost::placeholders 命名空间。
    • 修复了由于不正确的重载选择而可能在 async_compose 实现中发生的编译错误。
    • 抑制了一些非虚析构函数警告。
    • 各种文档修复和改进。
  • Assert:
    • 添加了 source_location
  • Atomic:
    • 实现了 C++20 atomic_ref。请参阅 文档,特别是 注意事项 部分。
    • 实现了 C++20 中引入的 atomic_flag::test 操作。
    • atomic<T> 现在应该考虑 T 的对齐要求,如果这些要求高于 atomic 的内部存储要求,则会有所不同。
    • 添加了静态断言,强制执行对与 atomicatomic_ref 一起使用的值类型 T 的要求。这应该禁止将无效类型用作原子类型。
    • 改进了内部锁池实现。池更大,并且锁选择考虑了原子对象对齐,这应减少线程争用的可能性。
    • 修复了为 8 位和 16 位参数生成的 bit_test_and_* 操作生成的不正确的 x86 代码。其他架构不受影响。
    • 如果 value_type 的对齐要求小于 atomic 的内部存储要求,则修复了 compare_exchange_* 操作中可能发生的未对齐内存访问。
    • boost/atomic/atomic.hpp 不再包含 boost/atomic/atomic_flag.hppboost/atomic/fences.hpp,并且仅定义 boost::atomic 类模板和相关的 typedef。显式包含其他头文件,或使用 boost/atomic.hpp 来包含 Boost.Atomic 的所有部分。
    • atomic<T>::storage() 访问器和相关的 atomic<T>::storage_type 类型已被弃用。相反,建议用户分别使用 atomic<T>::value()atomic<T>::value_type。用户可以定义 BOOST_ATOMIC_SILENCE_STORAGE_DEPRECATION 以在过渡期间禁用弃用警告。弃用的部分将在未来的版本中删除。
    • 移除了对 BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST 的支持。此宏用作过渡到 Boost.Atomic 1.67 中 *_and_test 操作的更新返回值的助手,该版本在 1.73 发布前 2 年发布。
  • Beast:
    • 这是一个维护更新。
    • Beast 动态缓冲区中嵌套的 mutable_data_type 已被弃用。
    • 我们很想知道您或您的公司如何使用 Beast,请考虑将条目添加到 使用 Beast 的公司和个人 列表中。
    • 请参阅完整的 发行说明,以获取完整的更改列表。
  • Context:
    • #133:IBM Z:修复 fcontext 例程
    • #132:mips64/n64:.align 3
    • #131:使用 OSPLAT MIPS32/MIPS64 设置不同的 ABI
    • #129:修复 RISC-V 程序集中的非 PIC
  • Conversion:
    • 为引用添加了 boost::polymorphic_downcast(感谢 Julien Delacroix 的补丁)。
    • 重要的文档更新。
  • date_time:
    • #123:在 c++14 及更高版本中支持 constexpr
    • #134:使 date_time 全部内联。用户不再需要链接任何函数的库。库仍然存在以实现构建兼容性。
    • #132:弃用对旧版 io 和 USE_DATE_TIME_PRE_1_33_FACET_IO 宏的支持
    • 其他文档更新和错误修复。
  • DLL:
    • 修复和测试 boost::dll::smart_library 中的名称反解(感谢 Ramil Gauss 的 #35)。
    • 使 UB sanitizers 对 boost::dll::load_mode::type #30 感到满意。
    • 停止依赖 MPL,从而缩短了编译时间(感谢 Nikita Kniazev 的 #34)。
    • Clang 和 ICC 在 Windows 上的修复以及对这些平台的 CI 支持(感谢 Nikita Kniazev #33)。
    • 维护工作,包括 CI 强化和测试改进。
  • Dynamic Bitset:
    • 修复了最大块限制定义中的可移植性问题。
  • Flyweight:
    • 维护工作。
  • Geometry:
    • 改进
      • PR#650 intersection() 中缺少输入组合,并引入了元组输出。
      • PR#671 添加了 d3::point_xyz 几何模型(感谢 Digvijay Janartha)。
    • 解决的问题
      • #657 EPSG:3785 的定义不正确。
    • 错误修复
      • PR#639 R 树异常安全性改进。
      • PR#668 修复了近点的 Andoyer 逆公式。
      • PR#687 修复了距离算法中的悬空引用。
    • 弃用
      • #590 对 C++03 的支持已被弃用,并且从 Boost 1.75 开始 Geometry 将需要 C++14。
  • GIL:
    • 添加了
      • image 类添加了移动构造函数和移动赋值运算符 (PR#457)。
      • any_image_view 类中的新成员函数 size() (PR#456)。
    • 已更改
      • 将 Boost.Test 替换为 Boost.LightweightTest,作为 GIL 中唯一使用的测试框架 (PR#459) 和 (PR#464)。这也重组了 test/extension/io/ 子树和相关 Jamfile 中的目标。
      • 移除了 Boost.MPL 的剩余用法 (PR#459)。
      • 重命名了所有使用 BOOST_GIL_ 前缀的宏 (PR#411)。
      • 重命名了所有使用 BOOST_GIL_ 前缀的 CMake 配置选项 (PR#419)。
    • 已更改
      • 移除了 extension/dynamic_image/reduce.hpp,因为它未使用且可能未完成 (PR#466)。Lubomir Bourdev 和 Jaakko Jarvi 的论文 使用最小代码膨胀在泛型编程中实现高效运行时分派 中描述的技术的实现尝试。
      • 移除了对 Boost.MPL、Boost.System 和 Boost.Test 的直接依赖。
      • 开始移除用于编译时配置 I/O 扩展测试的公共宏,即 BOOST_GIL_IO_TEST_ALLOW_READING_IMAGESBOOST_GIL_IO_TEST_ALLOW_WRITING_IMAGES。相反,如果构建了测试目标,它将无条件地构建其所有测试用例。
    • 已修复
      • 避免在 I/O 扩展对象的销毁期间进行 longjmp 交互 (PR#433)。
      • 修复了 image 类的构造函数中缺少对齐默认值的问题 (PR#429)。
      • 修复了读取损坏的 PNG 文件时发生的段错误 (PR#414)。
      • 修复了 I/O 扩展的旧 IOv1 接口中返回值非法初始化的问题 (PR#409)。
    • 致谢
      • Samuel Debionne, Thiago Henrique Hüpner, Pranam Lashkari, Mateusz Loskot, Debabrata Mandal, Olzhas Zhumabek
  • Histogram:
    • 新功能
      • reduce 算法添加了 crop 命令
      • reduce 中的 slice 命令现在适用于 category
      • 添加了 count 累加器,可用于向每个单元格添加任意元数据
      • sum 算法获得了一个新参数,可以选择仅对内部 bin 求和
    • 修复了角落案例中的几个错误
    • 增强的文档
      • 如何在外部 API 中将 Boost.Histogram 用作后端
      • 有关如何将 Boost.Histogram 与自定义累加器和 Boost.Accumulators 一起使用的更多信息
      • 有关如何使用 reduce 的更多信息
      • 更新的基准测试
  • icl:
    • PR#23:删除对 date_time 编译库的引用。
    • PR#17:修复前向声明 lower 和 upper less equal。
    • 其他错误修复。
  • IO:
    • 使所有 IOS 状态保存器类不可复制。(Glen Fernandes)
    • 在读取带引号的字符串时,正确处理从输入流首次读取时发生的错误。(Glen Fernandes)
    • 为基于分隔符的连接实现了 ostream_joiner。(Glen Fernandes)
    • ostream_string 从 Utility 库重新定位到 IO 库,作为 ostream_put
    • 正确处理带引号输出中的流宽度和填充。(Glen Fernandes)
    • 优化带引号的输出以直接写入流缓冲区。(Glen Fernandes)
    • Glen Fernandes 成为 IO 库的维护者。
  • LexicalCast:
    • 维护工作,包括 CI 强化和针对损坏的标准库的更好解决方法(感谢 Nikita Kniazev #31, #32)。
  • Log:
    • 新功能
      • 当日志核心中未注册任何 sink 时,在琐碎日志记录中使用的默认 sink 现在会在每个日志记录后自动刷新输出。(#103)
      • core::flush 现在对用于琐碎日志记录的默认 sink 执行刷新,当未注册任何 sink 时。
    • 错误修复
      • 为某些 syslog API 实现(例如 glibc)添加了解决方法,这些实现不会在 openlog 调用中保存应用程序标识字符串。此类实现在每次 syslog 调用时都可能访问已释放的内存,从而导致未定义的行为。(#97)
      • 修复了在每月的特定日期(例如 rotation_at_time_point(boost::gregorian::greg_day(1))) 进行日志文件轮换可能会被静默忽略且不会发生的问题。(#98)
      • 修复了如果尚未写入任何日志记录且设置了目标文件名模式,则 text_file_backend::rotate_file 可能会抛出异常的问题。
      • 将库的各种组件移植到 std::allocator_traits,以提高与 C++20 分配器的兼容性。
      • 修复了在 MSYS2 Cygwin 环境中构建时发生的编译错误。(#102)
    • 有关更多详细信息,请参阅 更改日志
  • Math:
    • 重要提示:C++03 支持现已弃用,并将于 2021 年 3 月移除。
    • 添加了三次埃尔米特插值。
    • 添加了修正的 Akima 插值。
    • 添加了 PCHIP 插值。
    • 添加了五次埃尔米特插值。
    • 向许多分布添加了熵。
    • 允许两个端点相等的琐碎正交情况,并且允许交换边界。
    • 修复了 exp_sinh 正交以处理非本机范围上的复数类型。
    • 修复了 factorial.hpp 中的各种编译器警告。
    • 在定时 pFq 计算中使用 std::chrono 而不是 boost::chrono。
    • 移除了很多旧的 boost::mpl 依赖项,以改进 constexpr 支持。
  • Mp11:
    • 添加了 mp_unique_if(由 Kris Jusiak 贡献)
    • 添加了 mp_flatten
    • 添加了 mp_rotate_leftmp_rotate_right(由 Duncan Barber 贡献)
    • 添加了 mp_compose
    • 添加了 mp_power_set
    • 添加了 mp_partial_sum
    • 添加了 mp_iterate
  • Multi-index Containers:
    • multi_index_container 现在是 AllocatorAware
    • 内部 KeyFromValueCompareHashPred 对象的交换现在在 std::swap 和 ADL 候选项之间选择适当的 swap 函数,这符合 [swappable.requirements] 中的标准规范(问题 #29)。
    • 提供了一些内部复制构造函数和赋值运算符,这些构造函数和运算符的默认隐式定义在 C++11 及更高版本中已弃用 ([depr.impldec]),一些编译器对此发出警告。
    • 维护工作。
  • Multiprecision:
    • 重要提示:将 C++03 支持标记为已弃用,并计划在 2021 年移除。
    • cpp_int 的重大更新添加了更快的 Karatsuba 和 Coomba 乘法例程。
    • 修复了 gmp_rational 到 long double__float128 的转换,修复了 #178。
    • 修复了 libtommath 支持以使其与最新的 libtom 版本一起工作。
    • 修复了一些与最新 Intel C++ 编译器的不兼容性。
    • 修复了最新 MSVC 版本的 constexpr 算术支持。
  • Outcome:
    • 增强功能
      • 大大提高了 clang 编译的基于 Outcome 的代码的性能。Outcome 的状态位字段的先前实现使 clang 的优化器感到困惑,这导致了低质量的代码生成。与大多数代码生成问题不同,这在真实代码的经验基准测试中显而易见,如 P1886 错误速度基准测试 所示。
      • better_optimisation Outcome v2.2.0 未来分支的安全部分已合并到 Outcome v2.1.3,其中包括新的状态位字段实现。这似乎不会使 clang 的优化器感到困惑,并且 clang 9 生成的代码通常在各种预定义的用例中击败 GCC 9 的代码。
      • 现在对每个提交测试了可安装性。由于独立 Outcome 的可安装性(例如 make install)比理想情况更频繁地自行破坏,因此现在在 CI 上对每个提交测试可安装性。
    • 错误修复
      • #214 更新的概念实现编译器对 TE 的可销毁性的早期检查不满意,因此移除了模板约束,回退到静态断言,该断言在类型实例化序列中稍后运行。
      • #220 解决了一些 Experimental Outcome 用例中的误报未定义行为清理器故障,以避免故障消息。
  • PolyCollection:
    • 抑制了 boost::poly_collection::for_each 中潜在的冗余移动警告。
    • 修复了一个错误,该错误导致在使用非传播、不相等分配器的情况下,在集合之间进行分配器扩展的移动构造和移动赋值时,元素被复制而不是移动。
    • 对于 GCC 4.8 随附的旧版 libstdc++-v3(Clang 也可以使用),分配器扩展的移动构造不再衰减为分配器扩展的复制构造。
  • Stacktrace:
    • 添加了有关 PDB 分发的文档 #55, #47(感谢 emptyVoid 和 Roger Orr 提供信息,感谢 zlojvavan 进行测试)。
    • 修复了 msvc-9 构建
    • 维护工作,包括测试修复 #86、修复拼写错误 #84、CI 改进和强化、inspect 工具修复。
  • Test:
  • ThrowException:
    • 添加了 throw_exception 的重载,它接受 boost::source_location 对象。
    • 注意:使用禁用异常的 BOOST_THROW_EXCEPTION 的项目将需要添加此新重载的定义。
  • TTI:
    • 为来自 gcc 和 vc++ 的更新的 C++ 编译器版本以及所有版本的 clang 添加了函数模板的内省。14.0 之前的旧版本 vc++ 和 4.8 之前的 gcc 可能会失败。
    • 为 struct/class、enum 和 union 类型的元素添加了特定的内省,它可用于比一般的“类型”内省更精细的内省。
  • TypeIndex:
    • 维护工作,包括与 inspect 工具的 CI 集成。
  • Utility:
    • ostream_string 工具已从 Utility 库移动到 IO 库,作为 ostream_put
  • Variant:
    • 移除了未使用的包含项(感谢 Nikita Kniazev #74)。
    • 修复了 zero-as-null-pointer-constat 警告(感谢 Bart Siwek #77)。
    • 维护工作,包括拼写错误修复。
  • Variant2:
    • 添加了对 std::hashboost::hash 的支持。
    • T... 中的所有类型都是平凡类型时,variant<T...> 现在是平凡类型。这通过使其能够传递到函数和从函数返回寄存器来提高性能。
  • WinAPI:
    • boost/detail/winapi 中的标头已被弃用,并将在未来的版本中删除。
    • Boost.WinAPI 标头不再包含 winerror.h。包含 boost/winapi/error_codes.hpp 以获取 Windows 错误代码。(#81)

更新的工具

  • Build:
    • 包括 B2 的 4.2.0 版本。
    • 警告:自 4.0.0 版本以来,B2 需要有能力的 C++11 编译器才能引导。这仅在构建 B2 本身时需要,而不是在构建 Boost 以供您使用时需要。

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang: 3.0, 4.0.1, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X
    • Apple Clang: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++17: 9.1.0, 10.0.0
    • Apple Clang, C++1z: 9.0.0
    • Apple Clang, C++2a: 10.0.0
  • Windows
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

Boost 的其他测试编译器包括

  • Linux
    • Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X
    • Apple Clang: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++17: 9.1.0, 10.0.0
    • Apple Clang, C++1z: 9.0.0
    • Apple Clang, C++2a: 10.0.0
  • Windows
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

致谢

Marshall Clow、Michael Caisse 和 Glen Fernandes 管理了此版本。