Boost C++ 库

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

版本 1.73.0

版本 1.73.0

2020年4月28日 格林威治标准时间03:57

文档

下载
平台文件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 concept 语法的兼容性。
    • 将 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 错误。
    • 修复了当线程池具有关联的 I/O 对象时发生的特定于 Windows 的 thread_pool 析构函数挂起问题。
    • 更改了select反应器在出错时重新创建“自管道技巧”套接字。这解决了某些 Windows 版本上的一个问题,在这些版本中,这些套接字在系统休眠后断开连接。
    • 修复了由于 C++98 中缺少引用折叠而导致的缓冲流中的编译错误。
    • 更改了 priority_scheduler 示例以演示对 shutdown()destroy() 的调用。
    • 删除了一些不必要的空指针检查。
    • 更改了 Windows 平台检测以将电视标题识别为 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 代码。其他架构不受影响。
    • 修复了 compare_exchange_* 操作中可能的未对齐内存访问,如果 value_type 的对齐要求小于 atomic 内部存储的对齐要求。
    • 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(在 1.73 之前 2 年发布)中更新的 *_and_test 操作的返回值的辅助工具。
  • 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 消毒剂对 boost::dll::load_mode::type 感到满意#30
    • 不再依赖 MPL,从而缩短编译时间(感谢 Nikita Kniazev 的#34)。
    • Windows 上的 Clang 和 ICC 修复以及对这些平台的 CI 支持(感谢 Nikita Kniazev 的#33)。
    • 维护工作,包括 CI 强化和测试改进。
  • 动态位集:
    • 修复了最大块限制定义中的可移植性问题。
  • Flyweight:
    • 维护工作。
  • Geometry:
    • 改进
      • PR#650 intersection() 中缺少的输入组合和元组输出的引入。
      • PR#671 添加了 d3::point_xyz 几何模型(感谢 Digvijay Janartha)。
    • 解决的问题
      • #657 EPSG:3785 的定义不正确。
    • 错误修复
      • PR#639 R 树异常安全改进。
      • PR#668 为近点修复了安多耶逆公式。
      • PR#687 修复了距离算法中的悬空引用。
    • 弃用
      • #590 对 C++03 的支持已被弃用,Geometry 将从 Boost 1.75 开始需要 C++14。
  • GIL:
    • 添加
      • image 类添加了移动构造函数和移动赋值运算符(PR#457)。
      • any_image_view 类中的新成员函数 size()PR#456)。
    • 更改
      • 将 Boost.Test 替换为 Boost.LightweightTest 作为 GIL 中使用的唯一测试框架(PR#459)和(PR#464)。这还重组了相关的 Jamfile 中的 test/extension/io/ 子树和目标。
      • 删除了剩余的 Boost.MPL 使用(PR#459)。
      • 使用 BOOST_GIL_ 前缀重命名了所有宏(PR#411)。
      • 使用 BOOST_GIL_ 前缀重命名了所有 CMake 配置选项(PR#419)。
    • 更改
      • 删除了未使用的且可能未完成的 extension/dynamic_image/reduce.hppPR#466)。该文件尝试实现 Lubomir Bourdev 和 Jaakko Jarvi 的论文《Efficient Run-Time Dispatching in Generic Programming with Minimal Code Bloat》(高效运行时调度与最小代码膨胀的泛型编程)中描述的技术。
      • 删除了对 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
  • 直方图:
    • 新功能
      • reduce 算法中添加了 crop(裁剪)命令
      • reduce 中的 slice(切片)命令现在可以作用于 category(类别)轴
      • 添加了 count(计数)累加器,可用于向每个单元格添加任意元数据
      • sum(求和)算法新增了一个参数,可以选择仅对内部区间求和
    • 修复了几个极端情况下的错误
    • 增强了文档
      • 如何将 Boost.Histogram 用作外部 API 的后端
      • 更多关于如何将 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)。
  • 日志:
    • 新功能
      • 在日志核心未注册任何接收器时,用于简单日志记录的默认接收器现在会在每条日志记录后自动刷新输出。(#103
      • core::flush 现在在没有注册接收器时对用于简单日志记录的默认接收器执行刷新。
    • 错误修复
      • 添加了针对某些 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
    • 有关更多详细信息,请参阅变更日志
  • 数学:
    • 重要提示:C++03 支持现已弃用,并将于 2021 年 3 月移除。
    • 添加了三次 Hermite 插值。
    • 添加了修正 Akima 插值。
    • 添加了 PCHIP 插值。
    • 添加了五次 Hermite 插值。
    • 为许多分布添加了熵。
    • 允许两个端点相等的平凡正交情况,并且还允许交换边界。
    • 修复 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_container 现在是 AllocatorAware(分配器感知)。
    • 根据 **[swappable.requirements]** 中的标准规范,内部 KeyFromValueCompareHashPred 对象的交换现在会在 std::swap 和 ADL 候选对象之间选择合适的 swap 函数(问题 #29)。
    • 提供了一些内部复制构造函数和赋值运算符,它们的默认隐式定义在 C++11 及更高版本中已被弃用(**[depr.impldec]),一些编译器对此发出了警告。
    • 维护工作。
  • 多精度:
    • 重要提示:将 C++03 支持标记为已弃用,并将于 2021 年移除。
    • 对 cpp_int 的重大更新添加了更快的 Karatsuba 和 Coomba 乘法例程。
    • 修复了 gmp_rational 转换为 long double__float128 的问题,修复了 #178。
    • 修复 libtommath 支持以使其与最新的 libtom 版本一起使用。
    • 修复了与最新 Intel C++ 编译器的一些不兼容性。
    • 修复了最新 MSVC 版本的 constexpr 算术支持。
  • 结果:
    • 增强功能
      • clang 编译的基于 Outcome 的代码的性能已大大提高。Outcome 的状态位字段的先前实现混淆了 clang 的优化器,这导致代码生成质量低下。与大多数代码生成问题不同,这在实际代码的经验基准测试中很明显,如 P1886 **错误速度基准测试** 所示。
      • better_optimisation Outcome v2.2.0 未来分支的安全部分已合并到 Outcome v2.1.3 中,其中包括一个新的状态位字段实现。这似乎不会混淆 clang 的优化器,并且 clang 9 生成的代码通常在各种预设用例中都优于 GCC 9 的代码。
      • 现在每个提交都会对可安装性进行 CI 测试。由于独立 Outcome 的可安装性(例如 make install)自身损坏的频率比理想情况更高,因此现在每个提交都会在 CI 上测试可安装性。
    • 错误修复
      • #214 更新的概念实现编译器对早期检查 TE 的可破坏性不满意,因此删除了模板约束,回退到在类型实例化序列的后期运行的静态断言。
      • #220 在某些 Experimental Outcome 用例中,未定义行为清理器误报的问题已得到解决,以避免出现故障消息。
  • PolyCollection:
    • 抑制了 boost::poly_collection::for_each 中潜在的冗余移动警告。
    • 修复了一个错误,该错误导致在具有非传播、不相等分配器的集合之间进行分配器扩展移动构造和移动赋值时,元素被复制而不是移动。
    • 对于 GCC 4.8 附带的旧版 libstdc++-v3(Clang 也可以使用),分配器扩展移动构造不再衰减为分配器扩展复制构造。
  • 堆栈跟踪:
    • 添加了有关 PDB 分发的文档 #55#47(感谢 emptyVoid 和 Roger Orr 提供信息,感谢 zlojvavan 进行测试)。
    • 修复了 msvc-9 构建
    • 维护工作,包括测试修复 #86、修复拼写错误 #84、CI 改进和强化、检查工具修复。
  • 测试:
  • ThrowException(抛出异常):
    • 添加了一个 throw_exception 的重载,它接受一个 boost::source_location 对象。
    • 注意:在禁用异常的情况下使用 BOOST_THROW_EXCEPTION 的项目需要添加此新重载的定义。
  • TTI(类型特征推导):
    • 为更新版本的 GCC、VC++ 和所有版本的 Clang 编译器添加了函数模板的内省。14.0 之前的旧版本 VC++ 和 4.8 之前的 GCC 可能会失败。
    • 添加了对结构体/类、枚举和联合类型的元素的特定内省,可用于比通用“类型”内省更细粒度的内省。
  • TypeIndex(类型索引):
    • 维护工作,包括与 inspect 工具的 CI 集成。
  • Utility(实用工具):
    • ostream_string 工具已从 Utility 库移至 IO 库,并更名为 ostream_put
  • Variant(可变体):
    • 删除了未使用的包含(感谢 Nikita Kniazev #74)。
    • 修复了零作为空指针常量的警告(感谢 Bart Siwek #77)。
    • 维护工作,包括修复拼写错误。
  • Variant2(可变体2):
    • 添加了对 std::hashboost::hash 的支持。
    • T... 中的所有类型都是平凡的时,variant<T...> 现在也是平凡的。这通过允许在寄存器中传递和返回它来提高性能。
  • WinAPI(Windows API):
    • 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 管理了此版本。