Boost C++ 库

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

版本 1.71.0

版本 1.71.0

2019 年 8 月 19 日 15:31 格林威治标准时间

文档

下载
平台文件SHA256 哈希值
Unixboost_1_71_0.tar.bz2d73a8da01e8bf8c7eda40b4c84915071a8c8a0df4a6734537ddde4a8580524ee
boost_1_71_0.tar.gz96b34f7468f26a141f6020efb813f1a2f3dfb9797ecf76a7d7cbd843cc95f5bd
Windowsboost_1_71_0.7z1b3949ffddf56129141032542523920034f2e69775fb93332a52ba37c548dbf35
boost_1_71_0.zip85a94ac71c28e59cf97a96714e4c58a18550c227ac8b0388c260d6c717e47a69
* 下载链接由C++ 联盟的资助支持。

新增库

  • Variant2: 由 Peter Dimov 提供的永不为空值、强保证实现的std::variant

更新的库

  • Align:
    • align_upalign_down的整型版本中支持任何整型。
    • 修改了aligned_allocator的实现,不再需要void的专门化。
    • aligned_allocator中定义propagate_on_container_move_assignmentis_always_equal
  • Asio:
    • 通过消除完成处理程序分派时的冗余移动构造,略微提高了性能。
    • 通过在自由函数connect()实现中添加注释来消除一个编译器警告(case贯穿)。
    • 修复了针对用户定义序列类型的is_*_buffer_sequence检测特性。
    • 修复了在获取CancelIoEx入口点时,关于不兼容指针转换的一些 Windows 特定的警告。
    • 更改为在 Windows 上打开串行端口时自动设置默认值。
    • 将串行端口get_option()成员函数更改为常量。
    • 修复了 WinRT 面向流的套接字后端shutdown函数的名称隐藏问题。
    • is_dynamic_buffer的文档进行了细微的修复。
    • 添加了一些对 Haiku 操作系统的支持。
    • 添加了 wolfSSL 兼容性。
    • 更改为需要 C++17 或更高版本才能使用 clang 进行协程 TS 支持。
    • 修复了教程中的 Doxygen 生成问题。
    • 确保示例程序正确地包含在文档中。
  • Any:
    • 现在可以对默认构造的boost::any进行静态初始化。
    • 修复了在没有移动语义的编译器上赋值操作的性能回归。
    • 维护工作。
  • Beast:
    • 此版本主要包含错误修复和性能改进。
    • 为分隔编译模式进行了大量工作,以减少定义BOOST_BEAST_SEPARATE_COMPILATION时的编译时间。
    • 我们很想知道您或您的公司如何使用 Beast,请考虑向使用 Beast 的公司和个人列表中添加一项。
    • 查看完整的发行说明以获取完整的更改列表。
  • 循环缓冲区:
    • 更正 Doxygen 生成的引用,不再显示内部成员。(Glen Fernandes)
    • 消除了addsub上的 ubsan 警告。(Glen Fernandes)
    • 修复了is_uninitialized中的不正确检查。(Niklas Fejes)
  • 容器:
  • Context:
    • 添加对 RISC-V LP64D 的支持
    • #72:修复 ppc64 ELFv2 上的 ABI 冲突
    • #99:如果创建 ucontext 失败,则清理堆栈
  • 转换:
    • 维护工作。
  • 核心:
    • <boost/core/alloc_construct.hpp>中添加了函数alloc_constructalloc_construct_nalloc_destroyalloc_destroy_n,用于支持分配器感知和异常安全的对象和数组构造和销毁。(Glen Fernandes)
    • <boost/core/first_scalar.hpp>中添加了 constexpr 函数first_scalar,用于获取指向数组第一个标量元素的指针。给定类型为T*的指针,它们返回类型为remove_all_extents_t<T>*的指针。(Glen Fernandes)
    • <boost/core/noinit_adaptor.hpp>中添加了类模板noinit_adaptor,它是一个分配器适配器,可以将任何分配器转换为一个分配器,其construct(ptr)通过就地 new 执行默认初始化,其destroy(ptr)直接调用value_type析构函数。(Glen Fernandes)
    • 添加了类模板default_allocator<boost/core/default_allocator.hpp>中,它可以作为最小默认分配器,其接口类似于 C++20 std::allocator,支持禁用异常的配置,并且没有std作为关联的命名空间。分配器使用operator newoperator delete进行分配。(Glen Fernandes)
    • <boost/core/uncaught_exceptions.hpp>头文件中,添加了解决方案,以更好地与使用 libc++/libc++abi 库的 QNX SDP 7.0 兼容。(Andrey Semashev,#59
    • <boost/detail/sp_typeinfo.hpp>头文件现在被标记为已弃用,并将​​在未来的版本中删除。应改用<boost/core/typeinfo.hpp>。(Peter Dimov)
  • 动态位集:
    • 在 MSVC 上启用了硬件辅助 popcount(PR#38)。
    • 添加了对 boost::hash 和 std::hash 的支持(PR#45)。
    • 支持使用默认构造函数进行复制初始化(PR#48)。
  • Endian:
    • 阐明了对值类型模板参数的要求
    • 添加了对floatdouble的支持
    • 添加了endian_loadendian_store
    • 更新了endian_reverse以正确支持所有非bool整型。
    • 将已弃用的名称移动到已弃用的头文件endian.hpp
  • Fiber:
    • 更新了 shared_work 的文档
  • 文件系统:
    • 修复了使用readdir_r时目录迭代器增量返回的error_code不正确的问题。
    • 对于path,修复了 rvalue 感知operator/返回类型,使其返回 rvalue 而不是 rvalue 引用。如果operator/的结果绑定到 const 引用,这将修复留下悬空引用的问题。(#110
    • 修复了与 Windows CE 的兼容性问题。(PR#24
    • 添加了对 CMake 的最小支持。(PR#106
  • 直方图(Histogram):
    • 新特性
      • 支持线程安全存储和新的线程安全累加器
      • 支持无异常/RTTI编译(性能提升 10-20%)(与 Glen Fernandes 合作)
      • 一维和二维直方图的性能改进
      • boost::histogram::indexed 现在返回正向迭代器范围,而不是输入迭代器范围
      • boost::histogram::indexed_range::accessor 现在不可复制,并充当单元格值的引用,使更多来自 C++ 标准库的算法能够工作
      • boost::histogram::algorithm::reduce 添加了新的切片选项和选项融合
      • boost::histogram::algorithm::project 接受静态直方图的运行时索引
    • 错误修复
      • boost::histogram::algorithm::reduce 也适用于某些轴类型不支持约简的直方图
      • boost::histogram::axis::traits::update 现在可以正确处理 boost::histogram::axis::variant
    • 其他
      • 100% 测试覆盖率
      • 减少了内部 Boost 依赖
      • 改进的文档和示例
      • 保证所有内置轴类型的无异常移动
      • 在更高的警告级别下干净编译
    • 查看 变更日志 获取更多详细信息。
  • IO流(IoStreams):
    • 修复了多流文件的处理问题。(PR#87
    • 添加了对多线程 LZMA 的支持。(PR#95
  • 词法转换(LexicalCast):
    • 添加了针对boost::filesystem::path转换的测试 #25
    • 维护工作,包括 #28
  • 日志(Log):
    • 新特性
      • 改进了对 C++17 std::string_viewbasic_formatting_ostream 中的支持。字符串视图现在可以参与输出时的字符代码转换。
      • 添加了auto_newline 格式化程序和流操纵器。它可以用于确保格式化输出始终以换行符结尾,同时避免重复换行符。
      • 在输出流中,文本文件和文本多文件接收器后端添加了对配置换行符行为的支持,以配置是否为每个格式化的日志记录附加尾随换行符。使用后端构造函数的auto_newline_mode命名参数,或调用接收器后端的set_auto_newline_mode方法。
      • 注意:与之前的 Boost.Log 版本相比,接收器后端添加的尾随换行符的默认行为略有更改。后端现在只有在格式化的日志消息字符串中不存在换行符时,才会添加尾随换行符。在之前的版本中,换行符是无条件添加的。
      • 添加了对在filterformat命名参数中传递任意函数对象的支持,以及用于初始化接收器的便捷函数。例如,现在可以在这些参数中直接指定 C++11 lambda 函数。(#63
      • 在过滤器和格式化程序解析器中使用的默认过滤器和格式化程序工厂中,添加了对类型为boost::log::trivial::severity_level 的严重性级别属性值的 支持。对于过滤器,支持仅限于名称为“Severity”的属性。
    • 错误修复
      • 修复了在文本文件接收器后端扫描文件时对旋转文件名组件的解析错误。如果文件名模式以占位符结尾(例如,文件计数器),则scan_for_files方法将找不到与目标存储中该模式匹配的文件,从而使它们无法管理。特别是,这些文件不会被删除以释放目标存储。(#78
      • 更新了basic_formatting_ostreambasic_record_ostream,以便可以为指向用户定义类型的指针重载流输出运算符。当指针被写入到 Boost.Log 流中的一个时,用户定义的operator<<重载(接受std::basic_ostream和一个指针参数)现在应该会被编译器选中。(#84
    • 查看 变更日志 获取更多详细信息。
  • 数学(Math):
    • 新特性
      • Catmull-Rom 插值器现在可在 C++11 中使用
      • 基数二次 B 样条插值
      • 椭圆积分的定义域扩展
      • sin_pi 和 cos_pi 性能改进
      • 前向模式自动微分
      • 向量值重心有理插值
      • Ooura 方法用于计算傅里叶积分
    • 错误修复
      • 修复了与高精度(Multiprecision)库的多个兼容性问题
      • 在罕见的架构上修复了 Lambert-W 函数
  • 元解析(Metaparse):
    • 新特性
      • 在 C++11 中,以下内容支持可变参数模板:sequenceone_of_cone_ofrepeated_one_ofrepeated_one_of1one_char_except_cone_char_except
    • 错误修复
      • BOOST_METAPARSE_STRING 不使用超出范围的字符值作为模板参数。
      • any_of_c<> 在 C++14 中不会创建空数组。
  • 多维数组(Multi Array):
    • 通过使用来自 Core 的新的alloc_construct_nalloc_destroy_n工具来简化分配器支持。(Glen Fernandes)
  • 多索引容器(Multi-index Containers):
  • 结果(Outcome):
    • 增强功能
      • #184 根据 Boost 发布管理者的要求,将version.hpprevision.hpp重新定位到 detail 目录中,并在每个缺少许可证声明的源文件的顶部添加了 Boost 许可证声明(我认为)。还利用这个机会运行了许可证重新标记脚本遍历所有 Outcome,因此版权日期现在是最新的。
      • #185 添加 FAQ 条目解释问题 #185,以及为什么我们现在不会做任何事情来修复它。
      • #189 重构了OUTCOME_TRY实现,以使用更清晰的自定义点,能够接受非常不同的输入。删除了std::experimental::expected<T, E>特化,因为这些不再需要。修复了先前声称它们是 ADL 发现的自定义点的文档,它们不是。添加了一个说明如何添加对外部输入类型支持的示例。
      • #183 特别为 Boost 添加了一个单独的motivation/plug_error_code
    • 错误修复
      • OUTCOME_VERSION_MINOR 未更新为 1。
      • #181 修复问题 #181,其中 Outcome 实际上并未实现强交换保证,尽管文档中说明了这一点。
      • #190 修复 Boost 版本中的问题 #190,其中单元测试套件无法从 Boost 发布发行版运行。
      • #182 修复问题 #182,其中trait::is_exception_ptr_available<T>始终为真,从而导致许多奇怪的问题,例如不打印诊断信息并尝试将所有内容提供给make_exception_ptr()
      • #192 修复问题 #192,其中std::basic_outcome_failure_exception_from_error()为组合了独立版和 Boost Outcome 的翻译单元定义了两次。
  • 参数(Parameter):
    • 升级了关键字生成宏BOOST_PARAMETER_TEMPLATE_KEYWORDPR#15)。
    • 将关键字生成宏BOOST_PARAMETER_NESTED_KEYWORD累加器(Accumulators)移动到此库(PR#28)。
    • 添加了对std::reference_wrapperstd::ref()的支持(PR#16)。
    • boost::parameter::requiredboost::parameter::optionalboost::parameter::deduced元函数定义移动到boost/parameter目录中的自己的头文件中(PR#18)。
    • 添加了对支持 Boost.Parameter 的函数调用运算符的支持(PR#20)。
    • 添加了对参数类别限定符“forward”、“consume”和“move_from”的支持(当前限定符为“in”、“out”和“in_out”)(PR#21)(PR#23),基于http://www.modernescpp.com/index.php/c-core-guidelines-how-to-pass-function-parameters。添加了新的使用方法语法BOOST_PARAMETER_NAME((object-name), namespace-name) qualifier(tag-name))BOOST_PARAMETER_NAME(qualifier(name))。(目前直接正确使用限定符以及BOOST_PARAMETER_FUNCTION和其他代码生成宏的现有代码应该保持不变,因此没有重大更改。)更改用法的原因为能够将参数类别约束应用于通过参数组合调用的支持 Boost.Parameter 的函数和构造函数。(否则,目前可以使用参数组合绕过在BOOST_PARAMETER_FUNCTION等中应用的参数类别约束。)
    • 增加了对完美转发(PR#23)(PR#26)的支持,以便parameter::parameters::operator()可以接受非const右值。作为一个积极的副作用,在支持完美转发的编译器上,Boost.Parameter 启用的函数和构造函数不再受限于BOOST_PARAMETER_MAX_ARITY。用户代码现在可以通过检测配置宏BOOST_PARAMETER_HAS_PERFECT_FORWARDING来检查此支持,或者通过定义配置宏BOOST_PARAMETER_DISABLE_PERFECT_FORWARDING来手动关闭此支持。
    • 添加了元函数boost::parameter::is_argument_packPR#27)、boost::parameter::are_tagged_argumentsPR#52)和boost::parameter::result_of::composePR#75)。
    • 添加了可变参数函数模板boost::parameter::compose(),它接受命名参数并以参数包的形式返回它们(PR#52)。对于不支持完美转发的编译器,配置宏BOOST_PARAMETER_COMPOSE_MAX_ARITY决定了boost::parameter::compose()可以接受的最大参数数量(PR#61)。
    • 添加了代码生成宏BOOST_PARAMETER_BASIC_FUNCTION_CALL_OPERATORBOOST_PARAMETER_BASIC_CONST_FUNCTION_CALL_OPERATORBOOST_PARAMETER_NO_SPEC_FUNCTIONBOOST_PARAMETER_NO_SPEC_MEMBER_FUNCTIONBOOST_PARAMETER_NO_SPEC_CONST_MEMBER_FUNCTIONBOOST_PARAMETER_NO_SPEC_FUNCTION_CALL_OPERATORBOOST_PARAMETER_NO_SPEC_CONST_FUNCTION_CALL_OPERATORBOOST_PARAMETER_NO_SPEC_CONSTRUCTORBOOST_PARAMETER_NO_SPEC_NO_BASE_CONSTRUCTORPR#52)。
    • 增加了对Boost.MP11的支持(PR#47)(PR#66)(PR#70)。用户代码现在可以通过检测配置宏BOOST_PARAMETER_CAN_USE_MP11来检查此支持,或者通过定义配置宏BOOST_PARAMETER_DISABLE_MP11_USAGE来手动关闭此支持。
    • 通过SFINAE改进了对参数相关返回类型的支持(PR#73)。
  • PtrContainer:
    • 修复了在1.66.0中引入的ptr_vector回归问题(PR#24)。
  • PolyCollection:
    • 维护工作。
  • SmartPtr:
    • weak_ptr添加了别名构造函数。
    • 添加了weak_ptr<T>::empty()
    • 添加了enable_shared_fromshared_fromweak_from
  • Stacktrace:
    • 修复了在C++98模式下使用线程消毒剂构建时,为默认构造的frame输出的name()source_location()source_line()
    • 修复了在MSVC上从name()source_location()输出长字符串的问题 #78
    • 维护工作。
  • 测试:
    • Boost.test v3.11,更多详情请参见更改日志
    • 重大更改
      • 如果某些非常旧的头文件被弃用,Boost.Test将显示弃用警告。如果您遇到此类警告,请按照指示操作:这些头文件将在将来的版本中删除。
    • 新功能
      • 现在可以使用BOOST_TEST来比较抽象类型。
    • 错误修复和拉取请求
  • 实用工具:
    • <boost/utility/ostream_string.hpp>中实现了函数模板ostream_string,以便最佳地将任何类型的字符串内容写入输出流。它满足[ostream.formatted.reqmts]的要求。(Glen Fernandes)
    • 优化了basic_string_viewbasic_string_ref的流输出运算符,以便直接写入rdbuf流缓冲区。(Glen Fernandes)
  • Uuid:
    • 重大更改:已更正基于MD5名称的uuid生成,使其在所有endian系统上都相同。定义BOOST_UUID_COMPAT_PRE_1_71_MD5以保持与1.66到1.70版本兼容的格式。这不会影响基于SHA1的默认基于名称的uuid生成。(PR#109
  • Variant:
    • PR#68中修复了使用非const引用传递的变体时boost::apply_visitor的编译问题。非常感谢Ed Catmur提供修复。
    • 增加了对std::hash的支持(PR#49)。可以定义宏BOOST_VARIANT_DO_NOT_SPECIALIZE_STD_HASH来避免这些专门化。
    • 由Nikita Kniazev在PR#63PR#66中添加了二进制大小和性能的微优化。
    • 维护工作,包括Nikita Kniazev的PR#64和Hans Dembinski的PR#67
  • YAP:
    • 添加了一个示例,演示如何创建自评估YAP表达式(即,不需要显式调用evaluate()transform()的表达式)。

测试的编译器

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负责此版本的发布。