版本 1.56.0
2014 年 8 月 7 日 16:08 GMT
文档
其他下载
模块化
Boost 版本控制已迁移到使用 git 子模块的系统。这对于用户来说影响不大,但目录结构现在略有不同。
部分库的模块已移动到不同的模块中,并且从现有代码中提取了几个新模块。所有头文件路径应保持不变。新模块包括:
-
Assert:可定制的 assert 宏。由 Peter Dimov 维护。
-
Core:其他库使用的核心实用程序,依赖性最小。由 Peter Dimov、Glen Fernandes 和 Andrey Semashev 维护。
-
Lexical_Cast:通用的文本到字面量转换,例如将 int 表示为字符串,或反之,来自 Kevlin Henney。
-
Throw_Exception:用于从 Boost 库抛出异常的通用基础设施,来自 Emil Dotchevski。
- Winapi:Windows API 声明,不包含 <windows.h>,供 Boost 内部使用。
新库
- Align:
- 内存对齐函数、分配器和适配器,来自 Glen Fernandes。
- Type_Index:
- 运行时/编译时可复制的类型信息,来自 Antony Polukhin。
更新的库
-
Acumulators:
- 新的累加器
rolling_variance 和 rolling_moment
-
Any:
-
Asio:
- 修复了
asio::spawn() 以便与新的 Boost.Coroutine 接口正确工作(#9442,#9928)。
- 确保未完成的
asio::spawn() 协程在被 io_service 析构函数清理时被正确展开(#9731)。
- 修复了由
io_service::wrap() 和 strand::wrap() 生成的处理程序的续接钩子委托(#9741)。
- 将 Windows I/O 完成端口后端更改为使用
ConnectEx(如果可用)来处理面向连接的 IP 套接字。
- 将非 Windows(和非 IOCP Windows)平台的
io_service 后端更改为每个 io_service 实例使用一个条件变量。这解决了当 run_one() 从多个线程使用时可能出现的竞争条件。
- 在计算基于某些
boost::chrono 和 std::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 实现的信号编号检查中的一个偏移一位错误(#9324)。
- 更改为使用 SSE2 内在函数而非内联汇编,以允许 Cray 编译器工作。
- 停止使用最新 Visual C++ 和 Windows SDK 中标记为已弃用的某些 Winsock 函数。
- 添加了一个用于使用gcc在 AIX 上构建单元测试的解决方法。
- 各种次要文档改进(#8295,#9605,#9771)。
-
Assign:
-
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 静态初始化的可选支持。(#8158)
- 修复了 SPARCv9 目标的编译。(#9446)
- 修复了 PowerPC 目标的编译。(#9447)
- 修复了 x86 和 x86-64 上与 Clang 的一些兼容性问题。(#9610,#9842)
- 删除了 IA64 平台上 Windows 的专用代码。
-
Circular Buffer:
-
Concept Check:
-
Container:
- 添加了基于 DlMalloc 的扩展分配器。
- 改进了基于树的有序关联容器的可配置性。现在可以使用 AVL、Scapegoat 和 Splay 树来实现
set、multiset、map 和 multimap。
- 修复的错误
-
Context:
- fcontext_t 是 opaque 指针,指向 context-data
- 更改了 make_fcontext() 的签名
-
#8826 无可执行栈
-
#9437 在 iOS 和 Windows Phone 8 上捕获异常
-
#9445 支持 x32 ABIs
-
#9522 支持 powerpc_64le
-
#9743 powerpc_64 le/be 的 bugfix
-
#9774 x86 在 Mac OS X + clang 上的 bugfix
-
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 Boost Chrono 在 HP uX 上因未定义的 pthread_getcpuclockid 而编译失败
-
#8006 Boost::Chrono 启动时断言 - steady_clock::now() - Windows
-
#9337 chrono::process_cpu_clock 时间点在 Linux 上相差 1000 倍
-
#9342 V2 上 process_cpu_clock::timepoint io 的回归
-
#9419 boost::chrono::floor()/round() 和负持续时间不正确
-
#9698 boost::chrono::thread_clock 在 OSX 上未声明
-
#9720 boost::this_thread::sleep_for() 在 win32 上有时会立即返回
-
#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 timegm 函数在 QNX 上不可用
-
Flyweight:
- 在支持可变参数模板的编译器中,
boost::flyweight<T> 现在提供了一个完美的转发构造函数来构造 T::T(以前使用的是模拟)。
-
flyweight 现在复制其底层类型的初始化列表构造函数和赋值运算符。
- 修复了模块间静态初始化问题(#9553)。
- 维护修复。
-
Fusion:
-
几何:
- 附加功能
- 用于膨胀/收缩几何图形的新算法 buffer(buffer 本身已存在,但那仅用于扩大框)。
- 新算法 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 中的 concept 检查中的类型错误。
- 错误修复
- intersects(polygon) 可能返回其闭合点的自相交点,已修复。
- equals() 对于非简单线性几何图形(根据 OGC 标准)可能返回错误结果,已修复。
- touches() 对于 CCW 面积状几何图形工作不正常,已修复。
- rtree nearest 查询对于非笛卡尔坐标系返回错误元素,已修复。
- rtree 在某些情况下与 Interprocess 分配器一起使用时崩溃,已修复。
-
哈希:
- 移除了部分 Visual C++ 6 的解决方法。
- 对
hash_combine 的持续改进,这改变了先前为该函数记录的算法。
-
Interprocess:
- 修复的错误
-
ABI 破坏性更改:#9221 表明消息队列的
BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX 选项完全损坏,因此为了获得可用的实现,需要进行 ABI 破坏性更改。
- 简化、重构和统一了(timed_)lock 代码,基于 try_lock()。处理超时过期时存在一些错误。
- 更改了条件变量析构函数的实现,以允许 POSIX 语义(条件变量可以在所有等待线程被唤醒后销毁)。
- 添加了
BOOST_INTERINTERPROCESS_SHARED_DIR_PATH 选项,用于在将共享内存对象实现为内存映射文件时定义用于放置它们的共享目录。
- 添加了对
BOOST_USE_WINDOWS_H 的支持。当定义此宏时,Interprocess 不声明使用的 Windows API 函数和类型,包括所有必需的 Windows SDK 头文件,并使用 Windows SDK 声明的类型和函数。
- 为
windows_shared_memory 添加了 get_size。
-
Intrusive:
- 改进了 Doxygen 生成的参考文档,并更新和修复了前向声明头文件。
-
ABI 破坏性更改:修复了 Boost 1.55 版本引入的 ABI 回归,主要在 MSVC 编译器上明显。
-
源代码破坏性更改:从 splay 容器中移除了先前已弃用的
xxx_dont_splay 函数、splay 容器中的 splay_set_base_hook 和 splay_set_member_hook,以及 splaytree_algorithms 函数中的 bool splay = true 额外参数。
- 修复的错误
- 优化了树的重新平衡代码,以避免冗余赋值。
- 为 64 位平台上的
suggested_upper_bucket_count/suggested_lower_bucket_count 添加了 64 位质数值。
- 删除了旧 SUN_CC 编译器的解决方法,这些编译器现在不受支持,因为现代 SunPro 编译器足够符合标准。
-
Lexical Cast:
- 添加了
try_lexical_convert 函数,该函数在转换失败时返回 false 并且不需要输出参数是默认可构造的(#6700)。
- 修复了字符串值带前导零转换为
bool 的问题(#9659)。
- 代码已更改,以生成更小的二进制文件并简化编译器的处理(#9046)。
- Boost.LexicalCast 库已从 Boost.Conversion 库中分离。
- 修复了一些警告(#8991)。
-
Log:
- 一般性更改
- 对于 Windows 目标,该库现在默认编译为 Windows XP。
- 向
record 和 record_view 添加了带有 attribute_name 参数的索引运算符。
- 为
basic_formatting_ostream 添加了非 const 对象输出的运算符。(#9389)
- 添加了对将命名范围的函数名和源文件名放入格式化字符串的支持。(#9263)
- 为命名范围格式化器添加了对不完整和空标记的支持。(#9123)
- 不完整命名范围列表的默认表示形式已更改:已省略尾随范围分隔符。
- 添加了对
std::regex 的支持头文件。
- 默认情况下,Boost.Log 在内部使用 Boost.Regex 作为正则表达式后端。可以通过定义配置宏来更改后端。
- 错误修复
- 修复了 AVX2 启用 CPU(例如 Intel Haswell)上的
dump 操纵符输出。
- 修复了记录器
get_attribute 方法的编译。
- 修复了同步和异步接收器前端的
locked_backend() 函数实现中可能的竞争。
- 修复了在使用
block_on_overflow 策略时,异步接收器入队方法中日志线程可能发生的无限阻塞。
- 有关更多详细信息,请参阅 更改日志。
-
数学:
-
破坏性更改:将许多主要用于内部维护的非核心头文件移至
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。
- 修复几何分布对 Policies 的使用,请参阅 #9833。
- 修复负二项分布的边界情况,请参阅 #9834。
- 修复 Mac OS 上的编译失败。
- 添加了 bernoulli_numbers,将任意精度 tgamma/lgamma 更改为使用 Sterling 近似(来自 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)。
- 修复了有缺陷的学生 t 示例代码,以及用于测试样本均值等价性的文档。
- 更好地记录了根查找代码中的
max_iter 参数,请参阅 #9225。
- 添加选项以显式启用/禁用常量代码中 __float128 的使用,请参阅 #9240。
- 清理了 Bessel I0 和 I1 代码中对负值的处理(移除了死代码),请参阅 #9512。
- 修复了传递给 tgamma 和 lgamma 的非常小的值的处理,使其不会产生虚假的溢出(感谢 Rocco Romeo)。
-
#9672 拉普拉斯分布的 PDF 和 CDF 抛出 domain_error 随机变量现在可以为无穷大。
- 在 Rocco Romeo 的帮助下,修复了 rising_factorial、falling_factorial 和 tgamma_delta_ratio 中的几个边界情况。
- 移除了常量
pow23_four_minus_pi,其值与名称不匹配(并且 Boost.Math 未使用),请参阅 #9712。
-
Move:
-
MPL:
-
boost::mpl::for_each 已启用,可在 GPU 上使用
-
MultiArray:
-
#5664 operator() 检查 Collection concept 但需要 RandomAccessCollection
-
#4874 在 debug 模式下使用 Visual C++ 2010 时编译错误
-
#3581 MultiArray 存储顺序示例对于 fortran_storage_ordering 不正确
-
#4032 将 MultiArray concepts 移出 detail 命名空间
-
#9212 C++ 标准论文链接错误
-
#8368 GCC -Wundef 警告关于 multi_array 中的 BOOST_MULTI_ARRAY_NO_GENERATORS
-
多索引容器:
- 哈希索引的
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)。
- 维护修复。
-
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 函数。
- 添加了用于迭代常微分方程解的迭代器,从而提供了 integrate 函数的替代方案。
- 添加了速度-Verlet 方法。
- 小的 bug 修复。
-
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。
- 显式禁止 optional 右值引用。
- 显式禁止将临时变量绑定到 optional 引用(重大更改)。
- 访问所包含值的方法更多,函数有
value()、value_or()、value_or_eval()。
- 更新并重新组织了文档,添加了教程和快速入门指南部分。
-
Predef:
- 添加了 MinGW 和 Windows 平台变体的
BOOST_PLAT_* 平台定义。
- 检测 Windows 编译器的 ARM 架构,以针对 Windows 8 的移动设备。
- 改进了 64 位 ARM 的 ARM 检测。
- 添加了对 iOS 作为操作系统的检测。
- 改进了在某些平台上的字节序检测。
- 添加了独占加模拟定义,用于平台和编译器检测。
-
预处理器:
- 使用可变参数宏时,添加了 tuple 功能以匹配所有数组功能。
-
Program Options:
--help 输出中的列现在会在所有选项组之间对齐(#6114)。
- 选项名称中的连字符在错误消息中不再被截断(#8009)。
-
Regex:
-
重大更改: 修正了
basic_regex<>::mark_count() 的行为,使其与现有文档一致,basic_regex<>::subexpression(n) 已更改以匹配,请参阅 #9227
- 修复了问题 #8903。
- 修复了来自 #9283 的文档拼写错误。
- 修复了排序代码中如果 locale 生成的排序字符串包含嵌入的 nul 字符则失败的错误,请参阅 #9451。
- 应用了关于不寻常线程使用(无静态初始化的互斥量)的补丁,请参阅 #9461。
- 添加了对无效 UTF-8 序列的更好检查,请参阅 #9473。
-
智能指针:
-
Thread:
-
新的实验性功能
-
#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 添加动态执行器和执行器适配器
-
已修复的 Bug
-
#8070 优先使用 GetTickCount64 而非 GetTickCount
-
#9333 ex_scoped_thread 在 msvc-12.0 上编译失败
-
#9341 编译错误 scoped_thread(move semantics) 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 编译 thread 时出现错误
-
#9708 boost::condition_variable::timed_wait 意外唤醒,本应无限等待
-
#9711 future 继续被调用两次
-
#9867 移除对 gcc-mingw 的引用
-
#10008 Boost 同步文档拼写错误(futures)
-
#10058 一次性初始化中的空指针访问
-
#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:
- 工单 #9441:为 Sun Solaris Studio C++ 编译器添加了更好的支持。
- 工单 #9444:处理包含类不是类类型的各种情况。
-
Unordered:
- 小的文档和警告修复(#9377、#9719)。
- 始终为整数使用素数桶数。修复了插入连续整数时的性能回归(#9282)。
- 仅使用分配器构造元素,如 C++11 标准所规定。
-
Utility:
- 一些组件已移至新的 Boost.Core 库。
-
empty_deleter 已弃用,推荐使用 Boost.Core 中的 null_deleter。empty_deleter 是 null_deleter 的别名,将在未来的版本中移除。
-
base_from_member 工具现在支持左值引用成员类型。(#7577)
-
UUID:
- 添加了对 C++11 特性的基本支持。
- 实现了
uuid 的一些函数的 SSE 优化版本,包括比较运算符和 swap。大多数编译器会自动检测对不同 SSE 版本的支持,但也可以通过 配置宏 显式启用或禁用。(#8509)
- 抑制了一些编译器警告。(#8495、#8697)
-
Variant:
-
重大更改: Variant 现在使用可变模板(如果编译器支持)。这会导致更小的二进制文件和更好的编译时间,但在某些情况下可能会破坏元编程函数,特别是如果没有使用 BOOST_VARIANT_ENUM_PARAMS 和 BOOST_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
- QNX
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
- QNX
- QCC, ARM: 4.4.2
- QCC, x86: 4.4.2
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此次发布。