Boost C++ 库

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

版本 1.71.0

版本 1.71.0

2019 年 8 月 19 日 15:31 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_71_0.tar.bz2d73a8da01e8bf8c7eda40b4c84915071a8c8a0df4a6734537ddde4a8580524ee
boost_1_71_0.tar.gz96b34f7468f26a141f6020efb813f1a2f3dfb9797ecf76a7d7cbd843cc95f5bd
windowsboost_1_71_0.7z1b3949ffddf56129141032542523920034f2e69775fb9332a52ba37c548dbf35
boost_1_71_0.zip85a94ac71c28e59cf97a96714e4c58a18550c227ac8b0388c260d6c717e47a69
* 这些下载链接由 The C++ Alliance 的资助提供支持。

新库

  • 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 检测特征。
    • 修复了一些 Windows 特定的警告,这些警告是关于获取 CancelIoEx 入口点时的不兼容指针转换。
    • 更改为在 Windows 上打开串行端口时自动设置默认值。
    • 将串行端口 get_option() 成员函数更改为 const。
    • 修复了 WinRT 面向流的套接字后端 shutdown 函数的名称隐藏问题。
    • is_dynamic_buffer 的文档应用了一个小修复。
    • 增加了一些对 Haiku OS 的支持。
    • 增加了 wolfSSL 兼容性。
    • 更改为要求 C++17 或更高版本才能使用 clang 支持协程 TS。
    • 修复了教程中的 doxygen 生成问题。
    • 确保示例程序正确地合并到文档中。
  • Any:
    • 现在可以静态初始化默认构造的 boost::any
    • 修复了在没有移动语义的编译器上赋值时的性能下降。
    • 维护工作。
  • Beast:
    • 此版本主要由错误修复和性能改进组成。
    • 大量工作包括用于拆分编译模式,以减少定义 BOOST_BEAST_SEPARATE_COMPILATION 时的编译时间。
    • 我们很想知道您或您的公司如何使用 Beast,请考虑向 Companies and Individuals Using Beast 列表添加一项。
    • 请参阅完整的 发行说明,以获取完整的更改列表。
  • Circular Buffer:
    • 更正了 Doxygen 生成的引用,不再显示内部成员。(Glen Fernandes)
    • 消除 addsub 上的 ubsan 警告。(Glen Fernandes)
    • 修复了 is_uninitialized 中的不正确检查。(Niklas Fejes)
  • Container:
  • Context:
    • 添加对 RISC-V LP64D 的支持
    • #72: 修复 ppc64 ELFv2 上的 ABI 违规
    • #99: 如果创建 ucontext 失败,则清理堆栈
  • Conversion:
    • 维护工作。
  • Core:
    • <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) 通过 placement new 执行默认初始化,并且其 destroy(ptr) 直接调用 value_type 析构函数。(Glen Fernandes)
    • <boost/core/default_allocator.hpp> 中添加了类模板 default_allocator,它可以作为一个最小的默认分配器,其接口类似于 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)
  • Dynamic Bitset:
    • 在 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 的文档
  • Filesystem:
    • 修复了在使用 readdir_r 时,目录迭代器增量返回的不正确的 error_code
    • 对于 path,修复了 rvalue 感知的 operator/ 返回类型以返回 rvalue 而不是 rvalue 引用。 如果 operator/ 的结果绑定到 const 引用,这将修复在用户代码中留下悬空引用的问题。 (#110)
    • 修复了更好地与 Windows CE 兼容的问题。 (PR#24)
    • 添加了对 CMake 的最低支持。 (PR#106)
  • Flyweight:
    • 维护工作。
  • Histogram:
    • 新功能
      • 支持线程安全的存储和新的线程安全累加器
      • 支持在没有异常/RTTI 的情况下编译(性能提高 10-20 %)(与 Glen Fernandes 合作)
      • 1D 和 2D 直方图的性能改进
      • boost::histogram::indexed 现在返回前向迭代器范围而不是输入迭代器范围
      • boost::histogram::indexed_range::accessor 现在不可复制,并且表现得像单元格值的引用,使得 C++ stdlib 中更多的算法可以工作
      • boost::histogram::algorithm::reduce 新增切片选项和选项融合
      • boost::histogram::algorithm::project 接受静态直方图的运行时索引
    • Bug 修复
      • boost::histogram::algorithm::reduce 也适用于某些轴类型不支持reduce的直方图
      • boost::histogram::axis::traits::update 现在可以正确地处理 boost::histogram::axis::variant
    • 其他
      • 100% 测试覆盖率
      • 减少了内部 Boost 依赖
      • 改进了文档和示例
      • 保证所有内置轴类型的 no-throw moves
      • 在更高的警告级别下干净地编译
    • 查看 更新日志 获取更多详细信息。
  • IoStreams:
    • 修复了多流文件的处理 (PR#87)。
    • 添加了对多线程 LZMA 的支持 (PR#95)。
  • LexicalCast:
    • 添加了对 boost::filesystem::path 转换的测试 #25
    • 维护工作,包括 #28
  • Log:
    • 新功能
      • 改进了 basic_formatting_ostream 中对 C++17 std::string_view 的支持。string view 现在可以参与输出时的字符代码转换。
      • 添加了 auto_newline 格式化器和流操作符。它可以用来确保格式化输出总是以换行符结尾,同时避免重复的换行符。
      • 在输出流、文本文件和文本多文件接收器后端中,添加了对配置行为的支持,以便在每个格式化的日志记录后附加一个尾随换行符。使用后端构造函数的 auto_newline_mode 命名参数,或者调用接收器后端上的 set_auto_newline_mode 方法。
      • 注意: 与之前的 Boost.Log 版本相比,接收器后端添加的尾随换行符的默认行为略有改变。现在,只有在格式化的日志消息字符串中没有换行符时,后端才会添加尾随换行符。在之前的版本中,会无条件地添加一个换行符。
      • 添加了对在接收器构造函数和用于初始化接收器的便捷函数的 filterformat 命名参数中传递任意函数对象的支持。例如,现在可以直接在这些参数中指定 C++11 lambda 函数。(#63)
      • 在过滤器和格式化器解析器中使用的默认过滤器和格式化器工厂中,添加了对 boost::log::trivial::severity_level 类型的严重级别属性值的支持。对于过滤器,该支持仅限于具有 "Severity" 名称的属性。
    • Bug 修复
      • 修复了在文本文件接收器后端中扫描文件时,对旋转文件名组件的不正确解析。如果文件名模式以占位符(例如,文件计数器)结尾,则 scan_for_files 方法将不会在目标存储中找到与该模式匹配的文件,从而使它们不受管理。特别是,不会删除此类文件以释放目标存储。(#78)
      • 更新了 basic_formatting_ostreambasic_record_ostream,使其可以重载用户定义类型的指针的流输出运算符。当指针被写入到 Boost.Log 流之一时,编译器现在应该选择带有 std::basic_ostream 和指针参数的用户定义 operator<< 重载。(#84)
    • 查看 更新日志 获取更多详细信息。
  • Math:
    • 新功能
      • Catmull-Rom 插值器现在可以在 C++11 中工作
      • Cardinal 二次 B 样条插值
      • 椭圆积分的定义域扩展
      • sin_pi 和 cos_pi 性能改进
      • 前向模式自动微分
      • 向量值重心有理插值
      • Ooura 的 Fourier 积分评估方法
    • Bug 修复
      • 修复了与 Multiprecision 的多个兼容性问题
      • 在一种罕见的架构上修复了 Lambert-W
  • Metaparse:
    • 新功能
      • 在 C++11 中,为以下内容提供可变参数模板支持:sequence, one_of_c, one_of, repeated_one_of, repeated_one_of1, one_char_except_c, one_char_except
    • Bug 修复
      • BOOST_METAPARSE_STRING 不使用超出范围的字符值作为模板参数。
      • any_of_c<> 不会在 C++14 中创建空数组。
  • Multi Array:
    • 通过使用 Core 中的新的 alloc_construct_nalloc_destroy_n 功能简化分配器支持。(Glen Fernandes)
  • Multi-index Containers:
    • 为不同限定的成员函数添加了 const_mem_funmem_fun 的变体 (issue #24)。
    • 简洁的 key 规范语法现在可以正确处理 noexcept 指定的成员函数 (issue #24)。
  • 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
    • Bug 修复
      • OUTCOME_VERSION_MINOR 尚未更新为 1。
      • #181 修复问题 #181,其中 Outcome 实际上并未实现强交换保证,尽管文档中已声明如此。
      • #190 修复 Boost 版本中的问题 #190,其中无法从 Boost 发布发行版运行单元测试套件。
      • #182 修复问题 #182,其中 trait::is_exception_ptr_available<T> 始终为 true,从而导致许多奇怪现象,例如不打印诊断信息并尝试将所有内容提供给 make_exception_ptr()
      • #192 修复问题 #192,其中对于将独立和 Boost Outcome 组合在一起的转换单元,std::basic_outcome_failure_exception_from_error() 被定义了两次。
  • Parameter:
    • 升级了关键字生成宏 BOOST_PARAMETER_TEMPLATE_KEYWORD (PR#15)。
    • 将关键字生成宏 BOOST_PARAMETER_NESTED_KEYWORDAccumulators 移动到此库 (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 模式下,对于使用线程清理器构建的默认构造的 framename()source_location()source_line() 的输出。
    • 修复了在 MSVC 上从 name()source_location() 输出长字符串的问题 #78
    • 维护工作。
  • Test:
    • Boost.test v3.11 请参阅 变更日志 了解更多详细信息。
    • 重大更改
      • 如果某些非常旧的头文件被标记为已弃用,Boost.Test 会显示弃用警告。 如果您遇到此类警告,请按照提示操作:这些头文件将在未来的版本中删除。
    • 新功能
      • 现在 BOOST_TEST 可用于比较抽象类型
    • 错误修复和拉取请求
  • Utility:
    • <boost/utility/ostream_string.hpp> 中实现了函数模板 ostream_string,以将任何类型的字符串内容最佳地写入输出流。 它满足 [ostream.formatted.reqmts] 的要求。 (Glen Fernandes)
    • 优化了 basic_string_viewbasic_string_ref 的流输出运算符,以直接写入 rdbuf 流缓冲区。 (Glen Fernandes)
  • Uuid:
    • 重大更改: 修复了基于 MD5 名称的 uuid 生成,使其在所有端序系统上都相同。 定义 BOOST_UUID_COMPAT_PRE_1_71_MD5 以保持与 1.66 到 1.70 兼容的格式。 这不会影响默认的基于 SHA1 的基于名称的 uuid 生成。(PR#109
  • Variant:
    • 修复了在 PR#68 中通过非常量引用传递的 variant 使用 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 管理了此版本。