Boost C++ 库

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

版本 1.56.0

版本 1.56.0

2014 年 8 月 7 日 16:08 GMT

文档

下载
平台文件
unixboost_1_56_0.tar.bz2
boost_1_56_0.tar.gz
windowsboost_1_56_0.7z
boost_1_56_0.zip

模块化

Boost 版本控制已迁移到使用 git 子模块的系统。这对用户来说不应该有太大的影响,尽管目录结构现在有点不同。

一些库的部分已移至不同的模块中,并且从现有代码中提取了几个新模块。所有头文件路径应保持不变。新模块包括

  • Assert: 可自定义的断言宏。由 Peter Dimov 维护。
  • Core: 其他库使用的核心实用程序,依赖性最小。由 Peter Dimov、Glen Fernandes 和 Andrey Semashev 维护。
  • Lexical_Cast: 一般字面文本转换,例如表示字符串的整数,或反之亦然,来自 Kevlin Henney。
  • Throw_Exception: 用于从 Boost 库抛出异常的通用基础结构,来自 Emil Dotchevski。
  • Winapi: 没有 <windows.h> 的 Windows API 声明,供 Boost 内部使用。

新库

  • Align: 内存对齐函数、分配器和适配器,来自 Glen Fernandes。
  • Type_Index: 运行时/编译时可复制的类型信息,来自 Antony Polukhin。

更新的库

  • Acumulators:
    • 新的累加器 rolling_variancerolling_moment
  • Any:
    • 修复了与右值引用相关的问题 (#9215, #9462)。
    • 放弃了对旧编译器的支持。
  • Asio:
    • 修复了 asio::spawn() 以便使用新的 Boost.Coroutine 接口正确工作 (#9442, #9928)。
    • 确保在 io_service 析构函数清理时,不完整的 asio::spawn() 协程被正确地展开 (#9731)。
    • 修复了由 io_service::wrap()strand::wrap() 生成的处理程序的继续钩子的委托 (#9741)。
    • 更改了 Windows I/O 完成端口后端以对面向连接的 IP 套接字使用 ConnectEx(如果可用)。
    • 更改了非 Windows(和非 IOCP Windows)平台的 io_service 后端,以便每个 io_service 实例使用单个条件变量。这解决了从多个线程使用 run_one() 时可能出现的竞争条件。
    • 防止了基于某些 boost::chronostd::chrono 时钟计算超时时发生的整数溢出 (#9662, #9778)。
    • 对 kqueue 后端中的 EV_CLEAR 处理进行了进一步更改,以解决在 Mac OS X 上 close() 系统调用可能会挂起的其他情况。
    • 修复了 resolver_query_base::flags::operator~ 实现中的无限递归 (#9548)。
    • 在 Windows 上,使 select 反应器对于大量套接字更有效 (#9528)。
    • 修复了由以下人员报告的特定于 Windows 的类型别名问题gcc (#9550).
    • 阻止执行仅编译时缓冲区测试,以避免触发地址清理器警告 (#8295)。
    • 在最新版本的 Windows 上禁用了 GetQueuedCompletionStatus 超时解决方法。
    • 在使用链接本地多播地址时添加了对基于字符串的作用域 ID 的支持。
    • 更改了 IPv6 多播组加入,以便在未显式指定接口的情况下,将地址的作用域 ID 用作接口。
    • 通过使用链接本地多播地址,修复了 Mac OS X 和 BSD 上的多播测试失败。
    • 解决了一个与匿名枚举有关的gcc问题 (#10042)。
    • 将 Windows HANDLE 后端更改为忽略 ERROR_MORE_DATA。相反,该错误将像其他错误一样传播(即在 error_code 中或作为 system_error 抛出),并将返回传输的字节数。对于需要处理部分消息的代码,应使用 error_code 重载 (#10034)。
    • 修复了 signal_set 实现的信号编号检查中的一个偏差 1 的错误 (#9324)。
    • 更改为使用 SSE2 内在函数而不是内联汇编,以允许 Cray 编译器工作。
    • 停止使用在最新 Visual C++ 和 Windows SDK 中标记为已弃用的某些 Winsock 函数。
    • 添加了在使用以下内容构建单元测试时的解决方法gcc在 AIX 上。
    • 各种小的文档改进 (#8295, #9605, #9771)。
  • Assign:
    • 解决了一些 C++11 的歧义 (#3073)。
  • Atomic:
    • 该库已重新设计。除了内部重构外,还修复了各种错误,包括功能测试宏和整数溢出处理的不正确值。
    • 更改了 memory_order 枚举的值。具体值不是接口的一部分,但如果该枚举在用户的接口中使用,则此更改可能会潜在地破坏 ABI。
    • 使用 MSVC 在 Windows x64 上实现了对 128 位原子操作的支持。该库假设目标 CPU 中存在 cmpxchg16b 指令。一些早期的 AMD CPU 不支持此指令。要定位这些 CPU,请定义 BOOST_ATOMIC_NO_CMPXCHG16B 宏。
    • 使用 MSVC 实现了对 Windows ARM 目标的实验性支持。
    • 使用 GCC 实现了对 DEC Alpha 目标的实验性支持。
    • 改进了使用 GCC 对 ARMv6 及更高版本的支持。将所有原子操作实现为汇编器块,而不是基于 CAS 的循环。ARMv7 支持 64 位操作。
    • 实现了对 BOOST_ATOMIC_FLAG_INIT 宏和 atomic_flag 的静态初始化的可选支持。(https://svn.boost.org/trac/boost/ticket/8158">#8158)
    • 修复了 SPARCv9 目标的编译。(https://svn.boost.org/trac/boost/ticket/9446">#9446)
    • 修复了 PowerPC 目标的编译。(https://svn.boost.org/trac/boost/ticket/9447">#9447)
    • 修复了 Clang 在 x86 和 x86-64 上的几个兼容性问题。(https://svn.boost.org/trac/boost/ticket/9610">#9610, https://svn.boost.org/trac/boost/ticket/9842">#9842)
    • 删除了 IA64 平台上 Windows 的专用代码。
  • 循环缓冲区:
    • #9970,#9334 支持 C++11 分配器模型。
    • 放弃了对旧编译器的支持。
  • 概念检查:
    • 更少的警告(包括 #5012)。
  • 容器:
  • 上下文:
    • fcontext_t 是指向上下文数据的不透明指针
    • 更改了 make_fcontext() 的签名
    • #8826 无可执行堆栈
    • #9437 捕获 iOS 和 Windows Phone 8 上的异常
    • #9445 支持 x32 ABI
    • #9522 支持 powerpc_64le
    • #9743 powerpc_64 le/be 的错误修复
    • #9774 Mac OS X + clang 上 x86 的错误修复
  • 协程:
    • 支持对称协程
    • #9355 修复 protected_stack_allocator 中的竞争条件
    • #9551 支持的架构列表
    • #9734 mmap() 返回值检查错误
    • #9735 protected_stack_allocator 没有 memset()
    • #9760 协程迭代器需要 const operator==
    • #10070 mmap() 返回值
    • #10157 protected_stack_allocator 中不需要文件描述符
  • 动态位集:
    • 支持 C++11 移动构造函数
    • 修复 MSVC 2013 上的警告
    • 支持 C++11 最小分配器
    • 添加 noexcept 规范
  • Chrono:
    • #6918 由于未定义的 pthread_getcpuclockid,HP uX 上 Boost Chrono 编译失败
    • #8006 启动时 Boost::Chrono 断言 - steady_clock::now() - Windows
    • #9337 Linux 上 chrono::process_cpu_clock 时间点错误,偏差因子为 1000
    • #9342 V2 上 process_cpu_clock::timepoint io 的回归
    • #9419 boost::chrono::floor()/round() 和负持续时间错误
    • #9698 OSX 中未声明 boost::chrono::thread_clock
    • #9720 win32 上 boost::this_thread::sleep_for() 有时会立即返回
    • #9859 删除对 gcc-mingw 的引用
    • #9918 Solaris 上 chrono 编译错误,函数 timegm
    • #9811 boost/boost/chrono/duration.hpp:355:56: error: call to non-constexpr function 'static std::numeric_limits<float>::_Ty std::numeric_limits<float>::max()' /home/zosun/input_service/inputservices-core-service/other/boost/boost/chrono/duration.hpp: In static member function 'static constexpr double boost::chrono::detail::chrono_numeric_limits<double, true>::lowest()'
    • #10069 32 位系统上 chrono 时钟的溢出
    • #10151 QNX 上 timegm 函数不可用
  • 享元模式:
    • 在支持可变参数模板的编译器中, boost::flyweight<T> 现在提供一个完美转发构造函数给 T::T (之前使用的是模拟实现)。
    • flyweight 现在复制其底层类型的初始化列表构造函数和赋值运算符。
    • 修复了模块间静态初始化问题 (ticket #9553)。
    • 维护性修复。
  • Fusion:
    • Fusion 可以在 GPU 上使用。
  • Geometry:
    • 附加功能
      • 用于膨胀/收缩几何图形的新算法缓冲区(缓冲区本身已经存在,但只是用于扩大一个盒子)
      • 新算法 remove_spikes,用于从环、多边形或多重多边形中删除尖峰的算法。
      • 新算法 point_on_surface,生成位于多边形表面(内部)上的点
      • 新算法 is_simple,如果几何图形根据 OGC 标准是简单的,则返回 true
      • 新算法 is_valid,如果几何图形根据 OGC 标准是有效的,则返回 true
      • 新算法 crosses,用于根据 OGC 标准检查此空间关系
      • 集合操作算法(difference、intersection、sym_difference 和 union_)现在支持点状或线性几何图形对作为输入
      • distance 和 comparable_distance 算法现在支持所有几何组合对
      • 不支持的空间关系(covered_by、touches、within 等)现在支持线性和/或面状几何图形作为输入
      • 对 boost::variants 作为各种算法中的输入几何图形的支持
      • 对索引线段的 rtree 支持
      • 用于任意几何图形的 rtree nearest() 谓词支持
    • 已解决的票据
      • 8310 重叠多边形的错误结果(通过使用 point_on_surface 来分离修复)
      • 8375 非闭合多边形的 sym_difference 返回闭合多边形
      • 8376 非闭合多边形的 difference 返回闭合多边形
      • 9081 布尔运算从非自相交多边形创建自相交多边形
      • 9245 检查 make_qbk.py 中的处理错误
      • 9563 (Sym)difference 不成功,通过缩放到稳健类型修复
      • 9628 由于缠绕策略对于近乎水平的线段无法正确工作,导致 within() 的错误结果
      • 9871 删除仅具有尖峰的多边形中的尖峰
      • 9947 文档中缺少关于 WKT 的信息
      • 9759 非笛卡尔坐标系的 R-tree knn 查询的无效结果
      • 10019 LineString 和 Box 的 Difference 返回它们的交集
      • 10077 boost/geometry/arithmetic/arithmetic.hpp 中概念检查中的错误类型
    • Bug 修复
      • intersects(polygon) 可能会为其闭合点返回一个自相交点,已修复
      • equals() 可能会根据 OGC 标准为非简单线性几何图形返回无效结果,已修复
      • touches() 对于逆时针面状几何图形无法正常工作,已修复
      • rtree 最近邻查询为非笛卡尔坐标系返回错误的元素,已修复
      • rtree 在某些情况下与 Interprocess 分配器一起使用时崩溃,已修复
  • Hash:
    • 删除了一些 Visual C++ 6 的解决方法。
    • 正在进行改进 hash_combine 的工作,这改变了该函数之前记录的算法。
  • Interprocess:
  • Intrusive:
  • Lexical Cast:
    • 添加了 try_lexical_convert 函数,该函数在转换失败时返回 false,并且不需要输出参数是默认可构造的 (#6700)。
    • 修复了将带有前导零的字符串值转换为 bool 的问题 (#9659)。
    • 更改代码以生成更小的二进制文件并简化编译器的工作 (#9046)。
    • Boost.LexicalCast 库已从 Boost.Conversion 库中分离出来。
    • 修复了一些警告 (#8991)。
  • Log:
    • 一般更改
      • 对于 Windows 目标,该库现在默认编译为 Windows XP。
      • recordrecord_view 添加了带有 attribute_name 参数的索引运算符。
      • basic_formatting_ostream 添加了非 const 对象输出的运算符。 (#9389)
      • 添加了支持,用于将命名范围的函数名称和源文件名放入格式化的字符串中。 (#9263)
      • 为命名范围格式化器添加了对不完整和空标记的支持。 (#9123)
      • 不完整的命名范围列表的默认表示已更改:省略了尾随范围分隔符。
      • 添加了对 std::regex 的支持头文件。
      • 默认情况下,Boost.Log 在内部使用 Boost.Regex 作为正则表达式后端。可以通过定义配置宏来更改后端。
    • Bug 修复
      • 修复了在启用 AVX2 的 CPU(例如,Intel Haswell)上的 dump 操作符输出。
      • 修复了记录器的 get_attribute 方法的编译。
      • 修复了同步和异步接收器前端的 locked_backend() 函数实现中可能出现的竞争。
      • 修复了在使用 block_on_overflow 策略时,异步接收器入队方法中日志线程可能出现的无限阻塞。
    • 有关更多详细信息,请参阅 changelog
  • Math:
    • 重大更改: 将一些主要用于内部维护的非核心头文件移动到了 libs/math/include_private 目录下。受影响的头文件包括 boost/math/tools/test_data.hpp, boost/math/tools/remez.hpp, boost/math/constants/generate.hpp, boost/math/tools/solve.hpp, boost/math/tools/test.hpp。您可以通过将 libs/math/include_private 添加到编译器的包含路径中来继续使用这些头文件。
    • 重大更改: 许多分布和特殊函数之前返回最大有限值而不是引发 overflow_error,现在已修复此问题,这意味着这些函数现在的行为与文档描述一致。但是,由于引发 overflow_error 的默认行为是抛出 std::overflow_error 异常,因此依赖于这些函数不抛出的应用程序现在可能会在之前没有异常的地方遇到异常。涉及的特殊函数有 gamma_p_inva、gamma_q_inva、ibeta_inva、ibetac_inva、ibeta_invb、ibetac_invb、gamma_p_inv、gamma_q_inv。涉及的分布有 pareto_distrib、beta_distrib、geometric_distrib、negative_binomial_distrib、binomial_distrib、chi_squared_distrib、gamma_distrib、inverse_chi_squared_distrib、inverse_gamma_distrib。请参阅 #10111
    • 修复了 round 和 trunc 函数,使其可以与整数参数一起使用,请参阅 #10066
    • 修复了 Halley 迭代以处理零导数(具有非零二阶导数)的情况,请参阅 #10046
    • 修复了几何分布对策略的使用,请参阅 #9833
    • 修复了负二项分布中的边界情况,请参阅 #9834
    • 修复了在 Mac OS 上的编译失败问题。
    • 添加了 bernoulli_numbers,更改了任意精度 tgamma/lgamma 以使用斯特林近似(来自 Nikhar Agrawal)。
    • 添加了贝塞尔函数的一阶导数:cyl_bessel_j_prime、cyl_neumann_prime、cyl_bessel_i_prime、cyl_bessel_k_prime、sph_bessel_prime 和 sph_neumann_prime(来自 Anton Bikineev)。
    • 修复了有缺陷的 Student's t 示例代码,以及用于测试样本均值等效性的文档。
    • 更好地记录了求根代码中的 max_iter 参数,请参阅 #9225
    • 添加了显式启用/禁用常量代码中使用 __float128 的选项,请参阅 #9240
    • 清理了 Bessel I0 和 I1 代码中对负值的处理(删除了死代码),请参阅 #9512
    • 修复了传递给 tgamma 和 lgamma 的非常小的值的处理,使其不会生成虚假的溢出(感谢 Rocco Romeo)。
    • #9672 Laplace 分布的 PDF 和 CDF 抛出 domain_error 随机变量现在可以是无限的。
    • 修复了 rising_factorial、falling_factorial 和 tgamma_delta_ratio 中的几个边界情况,感谢 Rocco Romeo。
    • 删除了常量 pow23_four_minus_pi,其值与名称不匹配(并且 Boost.Math 未使用),请参阅 #9712
  • MPL:
    • boost::mpl::for_each 启用了在 GPU 上使用
  • MultiArray:
    • #5664 operator() 检查 Collection 概念,但需要 RandomAccessCollection
    • #4874 在调试模式下使用 Visual C++ 2010 时出现编译错误
    • #3581 MultiArray 存储顺序示例对于 fortran_storage_ordering 不正确
    • #4032 将 MultiArray 概念移出 detail 命名空间
    • #9212 指向 C++ 标准论文的链接已损坏
    • #8368 GCC -Wundef 警告关于 multi_array 中的 BOOST_MULTI_ARRAY_NO_GENERATORS
  • Multi-index 容器:
    • 由于必须返回指向下一个元素的迭代器,哈希索引的 erase(iterator) 成员函数在低负载条件下曾经具有较差的性能(请参阅 #4264)。根据 LWG issue #579 的解决方案,此问题已得到修复,同时保持了 erase 的接口,代价是每个元素多使用一个字的内存。实际上,哈希索引的无序关联容器的 C++ 复杂性要求已得到改进,以便
      • 删除给定元素是无条件恒定时间的,
      • 最坏情况的性能不是 O(n),而是 O(ndist),其中 ndist 是索引中非等效元素的数量。
      由于哈希索引依赖于新的数据结构,其迭代器和局部迭代器的内部表示已更改,这会影响序列化:它们对应的序列化 类版本 已从 0 升级到 1。涉及哈希索引(局部)迭代器的旧归档可以由 Boost.MultiIndex 的 Boost 1.56 版本加载,反之则不行。
    • 哈希索引现在提供 reserve
    • 哈希索引现在可以根据 [unord.req] 中(经过适当调整的)C++ 标准规范检查相等性和不等性。
    • Boost.MultiIndex 的公共接口在适当的情况下提供 noexcept 规范(对于符合标准的编译器)。
    • 提高了将元素插入 multi_index_container 时失败的性能。
    • 删除了许多旨在支持 MSVC++ 7.0 及更早版本的内部代码。在没有此旧代码的情况下,编译时间可能会稍微快一些。
    • 修复了通过取消引用右值来插入元素的错误(票证 #9665)。
    • 使 Boost.MultiIndex 与 BOOST_BIND_NO_PLACEHOLDERS 兼容(票证 #9798)。
    • 维护性修复。
  • 多精度:
    • 更改浮点数到有理数的转换以使其成为隐式的,请参阅 10082
    • 修复 checked_cpp_rational typedef 的定义。
    • 修复了 cpp_int 中从字符串赋值的错误,请参阅 9936
    • 为二进制浮点添加了新的 cpp_bin_float 后端。
    • 修复了 cpp_int 中从字符串赋值的错误,请参阅 9936
    • 添加了特定于 MSVC 的 #include 以包含编译器内部函数,请参阅 9336
    • 修复了文档中的各种拼写错误,请参阅 9432
    • 修复了 gmp_rational 以允许从已复制的对象进行移动复制,请参阅 9497
    • 添加了 numeric_limits 的值列表。
  • Odeint:
    • 添加了代数和运算调度程序,用于自动检测适当的代数和运算。
    • 添加了对 Eigen、Boost.Multiarray、Boost.Mpi、Boost.Compute、Blaze 和 NT2 的支持。
    • 更改了代数接口以使用 algebra.norm_inf 函数。
    • 添加了用于迭代 ODE 解的迭代器,因此可以替代积分函数。
    • 添加了 Velocity-Verlet 方法。
    • 小的错误修复。
  • 可选:
    • 添加了对右值引用的支持。现在 optional<T> 可以与可移动但不可复制的 T 一起使用。
    • 改进了 swap (现在使用移动操作)。
    • 添加了函数 emplace()。这是来自 #1841 的最后一个请求。
    • optional 是可移动的,包括条件 noexcept 规范,这使其具有 move_if_noexcept 友好的特性。
    • 在支持它的平台上使用显式 operator bool() (#4227)(重大更改)。
    • 转发声明了 operator<<(ostream&, optional const&),以防止意外地不正确地序列化可选对象。
    • 从示例中删除了已弃用的函数 reset() (#9005)。
    • boost::none 的相等比较不需要 T 是 EqualityComparable 的。
    • 显式禁止了可选的右值引用。
    • 显式禁止将临时对象绑定到可选引用(重大更改)。
    • 更多访问包含值的方法,函数 value()value_or()value_or_eval()
    • 更新和重组了文档,添加了教程和快速入门部分。
  • Predef:
    • 为 MinGW 和 Windows 平台变体添加了 BOOST_PLAT_* 平台定义。
    • 检测 Windows 编译器面向 Windows 8 移动设备的 ARM 架构。
    • 改进了对 64 位 ARM 的 ARM 检测。
    • 添加了将 iOS 检测为操作系统的功能。
    • 改进了在某些平台上对字节序的检测。
    • 添加了平台和编译器检测的独占加模拟定义。
  • 预处理器:
    • 当使用可变参数宏时,添加了元组功能以匹配所有数组功能。
  • 程序选项:
    • --help 输出中的列现在在所有选项组中对齐 ( #6114)。
    • 带破折号的选项名称在错误消息中不再被截断 ( #8009)。
  • 正则表达式:
    • 重大更改:更正了 basic_regex<>::mark_count() 的行为以匹配现有文档,basic_regex<>::subexpression(n) 更改为匹配,请参见 #9227
    • 修复了问题 #8903
    • 修复了 #9283 中的文档排版错误。
    • 修复了如果区域设置生成包含嵌入空字符的排序字符串时,排序代码失败的错误,请参见 #9451
    • 应用了针对不寻常的线程使用情况(没有静态初始化的互斥锁)的补丁,请参见 #9461
    • 添加了对无效 UTF-8 序列的更好检查,请参见 #9473
  • 智能指针:
    • 更新了数组类型(T[]T[N])的 make_sharedallocate_shared 的重载,以符合 C++ 标准论文 N3939 中的规范,并显著降低了内部簿记结构的空间开销。
    • 更新了标量类型和数组类型的 make_shared 和 allocate_shared 的实现,以解决 C++ 标准库缺陷报告 #2070
  • 线程:
    • 新的实验性功能
      • #7446 异步:添加 when_any。
      • #7447 异步:添加 when_all。
      • #7448 异步:添加接受调度程序参数的异步。
      • #8274 同步:添加并发队列。
      • #8513 异步:添加基本线程池执行器。
      • #8518 同步:添加锁存类。
      • #8516 异步:添加 future/shared_future::then,它接受一个调度程序作为参数。
      • #9058 with_lock_guard 函数。
      • #9571 添加动态执行器和执行器适配器。
    • 修复的错误
      • #8070 优先使用 GetTickCount64 而不是 GetTickCount。
      • #9333 ex_scoped_thread 在 msvc-12.0 上编译失败。
      • #9341 编译错误 scoped_thread(移动语义) intel-linux-14.0.1。
      • #9366 async(Executor, ...) 在 msvc-10,11,12 上编译失败。
      • #9402 test_excutor 在 msvc-10,11,12 上的回归。
      • #9404 ex_make_future 回归错误。
      • #9471 同步文档问题。
      • #9535 缺少异常安全性可能会导致崩溃。
      • #9618 try_join_for 问题:程序未终止。
      • #9625 请重写 boost::thread::~thread() 参考部分。
      • #9632 boost::thread 类中的公共方法 start_thread。
      • #9673 在 Windows 上使用 MingW/gcc 进行线程编译时出现错误。
      • #9708 boost::condition_variable::timed_wait 在应该无限等待时意外唤醒。
      • #9711 future continuation 被调用两次。
      • #9867 删除对 gcc-mingw 的引用。
      • #10008 Boost 同步文档排版错误(future)。
      • #10058 once 中的空指针访问。
      • #10125 call_once:使用右值引用模拟的 variadic 版本中出现编译错误。
      • #10126 call_once:弃用 (Function, once_flag&) 重载。
      • #10147 pthread_delay_np() 参数在 AIX 上即使使用 gcc 也不同。
      • #10155 thread::physical_concurrency() 在 PowerPC 上始终返回 0。
      • #10184 Future:多重定义的符号。
  • TR1:
    • 此库现在已弃用。
  • TTI:
    • 问题 #9441:增加了对 Sun Solaris Studio C++ 编译器的更好支持。
    • 问题 #9444:处理封闭类不是类类型的所有情况。
  • 无序容器:
    • 小的文档和警告修复 ( #9377, #9719)。
    • 始终为整数使用质数的桶数。修复了插入连续整数时的性能回归 ( #9282)。
    • 仅按照 C++11 标准中指定的那样使用分配器构造元素。
  • 实用工具:
    • 一些组件已移至新的 Boost.Core 库。
    • empty_deleter 已弃用,取而代之的是来自 Boost.Core 的 null_deleterempty_deleternull_deleter 的别名,将在以后的版本中删除。
    • base_from_member 实用工具现在支持左值引用成员类型。( #7577)
  • UUID:
    • 添加了对 C++11 特性的基本支持。
    • 实现了 uuid 的一些函数的 SSE 优化版本,包括比较运算符和 swap。对于大多数编译器,对不同版本的 SSE 的支持在编译时会自动检测,但也可以使用 配置宏 显式启用或禁用。( #8509)
    • 消除了一些编译器警告。( #8495, #8697)
  • Variant:
    • 重大更改:如果编译器支持,Variant 现在使用可变参数模板。这会导致更小的二进制文件和更快的编译时间,但在某些情况下可能会破坏元编程函数,特别是如果未使用 BOOST_VARIANT_ENUM_PARAMSBOOST_VARIANT_ENUM_SHIFTED_PARAMS。可变参数模板的用法 可以禁用
    • 添加了 polymorphic_get 函数 #9479
    • 只能移动的类现在可以由访问者返回。
    • 优化了 variant::swap() 并修复了 move_swap 中的歧义 #2839
    • 为移动赋值、默认构造函数和移动构造函数添加了条件 noexcept,使 boost::variant move_if_noexcept 友好 ( #7911)。
    • 即使使用 -fvisibility=hidden 标志,异常现在在模块之间也是可见的。
    • 放弃了对旧编译器的支持。
    • 修复了一些警告 ( #3020)。

测试过的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang: 3.4, 3.3, 3.2, 3.1, 3.0
    • Clang, C++98: 3.3.16
    • Clang, C++11, libc++: 3.4.2
    • Clang, C++1y: 3.3.16
    • GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7
    • GCC, C++98: 4.9.0
    • GCC, C++11: 4.8.2
    • GCC, C++1y: 4.9.0
    • Intel: 13.1
  • OS X
    • Apple Clang: 5.1
    • Apple Clang, C++11: 5.1
    • GCC: 4.2.1
    • Intel: 12.0
  • Windows
    • GCC, mingw: 4.9.0, 4.8.2, 4.7.3, 4.7.2, 4.6.3, 4.5.4, 4.4.7
    • Visual C++: 12.0, 11.0, 10.0, 9.0
  • FreeBSD
    • GCC: 4.2.1
  • QNX
    • QCC: 4.4.2

Boost 的其他测试编译器包括

  • Linux
    • Clang: 3.4, 3.3, 3.2, 3.1, 3.0
    • Clang, C++98: 3.3.16
    • Clang, C++11, libc++: 3.4.2
    • Clang, C++1y: 3.3.16
    • Clang, C++14, libc++: trunk
    • GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7
    • GCC, C++98: 4.9.0
    • GCC, C++11: 4.9.0, 4.8.2
    • GCC, C++1y: 4.9.0
    • Intel: 13.1, 13.0, 12.1, 11.1
  • OS X
    • Apple Clang: 5.1
    • Apple Clang, C++11
    • Clang: trunk
    • Clang, C++11: trunk
    • GCC: 4.2.1
    • Intel: 12.0
  • Windows
    • GCC, mingw: 4.9.0, 4.8.2, 4.7.2, 4.6.3, 4.5.4, 4.4.7
    • Visual C++: 12.0, 11.0, 10.0, 9.0
  • FreeBSD
    • GCC: 4.2.1
  • QNX
    • QCC, ARM: 4.4.2
    • QCC, x86: 4.4.2

致谢

Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此版本。