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)。
    • 确保不完整的 asio::spawn() 协程在被 io_service 析构函数清理时被正确地展开 (#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 处理进行了进一步更改,以解决 close() 系统调用可能在 Mac OS X 上挂起的其他情况。
    • 修复了 resolver_query_base::flags::operator~ 实现中的无限递归 (#9548)。
    • 使 select 反应器在 Windows 上对于大量套接字更有效率 (#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 实现的信号编号检查中的一个偏差一错误 (#9324)。
    • 更改为使用 SSE2 内在函数而不是内联汇编,以允许 Cray 编译器工作。
    • 停止使用某些在最新 Visual C++ 和 Windows SDK 中标记为已弃用的 Winsock 函数。
    • 添加了一个使用以下工具构建单元测试的解决方法gcc在 AIX 上。
    • 各种小的文档改进 (#8295, #9605, #9771)。
  • Assign:
    • 解决了一些 C++11 歧义 (#3073)。
  • Atomic:
    • 该库已重新设计。 除了内部重构外,还修复了各种错误,包括功能测试宏和整数溢出处理的值不正确。
    • 更改了 memory_order 枚举的值。 具体值不是接口的一部分,但是如果枚举在用户界面中使用,则此更改可能会破坏 ABI。
    • 实现了对 Windows x64 上使用 MSVC 进行 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 的静态初始化的可选支持。 (#8158)
    • 修复了 SPARCv9 目标的编译。 (#9446)
    • 修复了 PowerPC 目标的编译。 (#9447)
    • 修复了 Clang 在 x86 和 x86-64 上的几个兼容性问题。 (#9610, #9842)
    • 删除了 IA64 平台上 Windows 的专用代码。
  • Circular Buffer:
    • #9970,#9334 支持 C++11 分配器模型。
    • 放弃了对旧编译器的支持。
  • Concept Check:
    • 更少的警告(包括 #5012)。
  • Container:
  • Context:
    • 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 的错误修复
  • Coroutine:
    • 支持对称协程
    • #9355 修复 protected_stack_allocator 中的竞争条件
    • #9551 支持的架构列表
    • #9734 错误的 mmap() 返回值检查
    • #9735 protected_stack_allocator 没有 memset()
    • #9760 协程迭代器需要 const operator==
    • #10070 mmap() 返回值
    • #10157 protected_stack_allocator 中不需要文件描述符
  • Dynamic Bitset:
    • 支持 C++11 移动构造函数
    • MSVC 2013 上的警告修复
    • 支持 C++11 最小分配器
    • 添加 noexcept 规范
  • Chrono:
    • #6918 由于未定义的 pthread_getcpuclockid,Boost Chrono 在 HP uX 上编译失败
    • #8006 Boost::Chrono 启动时断言 - steady_clock::now() - Windows
    • #9337 Linux 上 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: 错误:调用非 constexpr 函数 'static std::numeric_limits<float>::_Ty std::numeric_limits<float>::max()' /home/zosun/input_service/inputservices-core-service/other/boost/boost/chrono/duration.hpp: 在静态成员函数 'static constexpr double boost::chrono::detail::chrono_numeric_limits<double, true>::lowest()'
    • #10069 32 位上 chrono 时钟溢出
    • #10151 QNX 上 timegm 函数不可用
  • Flyweight:
    • 在具有可变参数模板支持的编译器中,boost::flyweight<T> 现在为 T::T 提供了一个完美转发构造函数(以前使用模拟)。
    • flyweight 现在复制其底层类型的初始化列表构造函数和赋值运算符。
    • 修复了模块间静态初始化问题(票证 #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 树 knn 查询的无效结果
      • 10019 Linestring 和 Box 的 Difference 返回它们的交集
      • 10077 boost/geometry/arithmetic/arithmetic.hpp 中概念检查中的错误类型
    • 错误修复
      • intersects(polygon) 可能会为其闭合点返回自相交点,已修复
      • equals() 可能会根据 OGC 标准为非简单线性几何图形返回无效结果,已修复
      • touches() 对于 CCW 面积几何图形无法正常工作,已修复
      • 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 作为正则表达式后端。 可以通过定义配置宏来更改后端。
    • 错误修复
      • 修复了 AVX2 启用 CPU(例如 Intel Haswell)上的 dump 操作符输出。
      • 修复了记录器的 get_attribute 方法的编译。
      • 修复了同步和异步 sink 前端的 locked_backend() 函数实现中可能存在的竞争。
      • 修复了在使用 block_on_overflow 策略时,异步 sink 入队方法中日志记录线程可能存在的无限阻塞。
    • 有关更多详细信息,请参阅 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
    • 修复了 Geometric 分布策略的使用,请参阅 #9833
    • 修复了负二项分布中的极端情况,请参阅 #9834
    • 修复了 Mac OS 上的编译失败。
    • 添加了 bernoulli_numbers,更改了任意精度 tgamma/lgamma 以使用 Sterling 近似值(来自 Nikhar Agrawal)。
    • 添加了 Bessel 函数的一阶导数: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 关于 multi_array 中 BOOST_MULTI_ARRAY_NO_GENERATORS 的 GCC -Wundef 警告
  • Multi-index Containers:
    • 哈希索引的 erase(iterator) 成员函数在低负载条件下曾经具有较差的性能,这是因为必须返回指向下一个元素的迭代器(请参阅票证 #4264)。 根据 LWG 问题 #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)。
    • 维护修复。
  • Multiprecision:
    • 更改了浮点到有理数的转换以使其成为隐式转换,请参阅 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 解的迭代器,因此是 integrate 函数的替代方法。
    • 添加了 Velocity-Verlet 方法。
    • 小的错误修复。
  • Optional:
    • 添加了对右值引用的支持。 现在 optional<T> 可以与可移动但不可复制的 T 一起使用。
    • 改进了 swap(现在使用移动操作)。
    • 添加了函数 emplace()。 这是来自 #1841 的最后一个请求。
    • optional 是可移动的,包括条件 noexcept 规范,这使其对 move_if_noexcept 友好。
    • 在支持它的平台上使用显式 operator bool() (#4227)(破坏性更改)。
    • 前向声明 operator<<(ostream&, optional const&) 以防止无意中错误地序列化 optional 对象。
    • 从示例中删除了已弃用的函数 reset() (#9005)。
    • boost::none 进行相等性比较不需要 T 是 EqualityComparable。
    • 显式禁止可选的右值引用。
    • 显式禁止将临时对象绑定到可选引用(破坏性更改)。
    • 更多访问包含值的方法,函数 value()value_or()value_or_eval()
    • 更新和重新组织了文档,添加了教程和快速入门部分。
  • Predef:
    • 为 MinGW 和 Windows 平台变体添加了 BOOST_PLAT_* 平台定义。
    • 检测 Windows 编译器的 ARM 架构以面向 Windows 8 的移动设备。
    • 改进了 64 位 ARM 的 ARM 检测。
    • 添加了对 iOS 作为操作系统的检测。
    • 改进了某些平台上的字节序检测。
    • 为平台和编译器检测添加了独占加模拟定义。
  • Preprocessor:
    • 当使用可变参数宏时,添加了元组功能以匹配所有数组功能。
  • Program Options:
    • --help 输出中的列现在在所有选项组中对齐 (#6114)。
    • 带有破折号的选项名称不再在错误消息中被截断 (#8009)。
  • Regex:
    • 重大变更: 修正了 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 Async: 添加 when_any。
      • #7447 Async: 添加 when_all。
      • #7448 Async: 添加接受调度器参数的 async。
      • #8274 Synchro: 添加并发队列
      • #8513 Async: 添加基本的 thread_pool 执行器。
      • #8518 Synchro: 添加 latch 类。
      • #8516 Async: 添加 future/shared_future::then,接受调度器作为参数。
      • #9058 with_lock_guard 函数
      • #9571 添加动态执行器和执行器适配器
    • 已修复的错误
      • #8070 prefer 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 同步文档错别字 (futures)
      • #10058 once 中的空指针访问
      • #10125 call_once: 使用右值引用模拟的变参版本中的编译错误
      • #10126 call_once: 弃用 (Function, once_flag&) 重载
      • #10147 pthread_delay_np() 参数在 AIX 上即使使用 gcc 也不同
      • #10155 thread::physical_concurrency() 在 PowerPC 上始终返回 0
      • #10184 Future: 多重定义的符号
  • TR1:
    • 此库现已弃用。
  • TTI:
    • Ticket #9441: 增加了对 Sun Solaris Studio C++ 编译器的更好支持。
    • Ticket #9444: 处理封闭类不是类类型的所有情况。
  • Unordered:
    • 次要文档和警告修复 (#9377, #9719)。
    • 始终对整数使用质数个桶。修复了插入连续整数时的性能下降问题 (#9282)。
    • 仅使用分配器构造元素,如 C++11 标准中所指定。
  • Utility:
    • 一些组件已移至新的 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::variantmove_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 管理了此版本。