版本 1.58.0
版本 1.58.0
2015 年 4 月 17 日 07:53 GMT
平台 | 文件 |
---|---|
unix | boost_1_58_0.tar.bz2 |
boost_1_58_0.tar.gz | |
windows | boost_1_58_0.7z |
boost_1_58_0.zip |
已知问题
-
如果 Boost.Python 针对以下 Python 版本之一编译,则将无法构建:3.0.X、3.1.X、3.2.X、3.3.X。版本 2.X 和 3.4+ 不受影响。这已在 git 中修复。
补丁
-
0001-Fix-exec_file-for-Python-3-3.4.patch (适用于 libs/python)。
-
0002-Fix-a-regression-with-non-constexpr-types.patch (适用于 libs/fusion)。
更新的库
-
Asio:
-
确保 Windows 的
ConnectEx
函数生成的错误映射到其可移植的等效项 (#10744)。 -
添加了新的宏
BOOST_ASIO_DISABLE_CONNECTEX
,以允许显式禁用ConnectEx
的使用。 -
修复了
windows::object_handle
中在销毁时存在挂起的等待操作时的竞争条件 (#10624)。 -
修复了 FreeBSD 上的 IPv6 地址解析,其中尾随范围 ID 会导致转换为失败并显示
EINVAL
。 -
更改了 SSL 包装器,以便在加载内存密钥时调用密码回调 (#10828)。
-
修复了错误的 SSL 错误报告,方法是确保在每次操作之前清除 SSL 错误队列。
-
修复了
ssl::stream<>
错误,该错误可能导致虚假的“读取过短”错误。 -
删除了 SSL 引擎中冗余的空指针检查 (#10088)。
-
添加了禁用 TLS v1.1 和 v1.2 的选项 (#10690)。
-
删除了对已弃用的 OpenSSL 函数
ERR_remove_state
的使用。 -
修复了 C++11
std::addressof
的检测g++ (#10982). -
更改了多播测试,以将某些
join_group
失败视为非致命错误。 -
将 Asio 单元测试与 Boost.Test 解耦 (#11116)。
-
更改了教程以使用
std::endl
以确保输出被刷新。 -
修复了 Clang 的整数清理器报告的无符号整数溢出。
-
在使用带有异步操作的
yield_context
对象时,添加了对仅移动返回类型的支持。 -
更改了
yield_context
以允许从启动函数对完成处理程序进行可重入调用。 -
更新了 Windows Runtime 的检测以与最新的 Windows SDK 配合使用。
-
-
Chrono:
-
版本 2.0.5
-
修复
-
#10778 VC14 CTP4 Atomic 在使用非 TriviallyCopyable 的 boost::chrono duration 时无法编译
-
#10840 test_7868.cpp 中 puts 调用的 std:: 限定符缺失
-
#10851 time_point_output.cpp 中 puts 调用的 std:: 限定符缺失
-
#10893 Boost.Chrono 中的小文档错别字
-
#10992 Chrono IO 状态保存器与 Boost.IO 状态保存器不一致
-
#10995 duration_put::put_value 截断小数部分
-
#11006 由于多个错误,无法实例化 time_fmt_io_saver。
-
#11012 chrono_io v2 在使用 boost::chrono::duration< boost::rational<int> > 时无法编译
-
-
-
Container:
-
实验性的
small_vector
容器。 -
大规模的依赖关系重组。现在 *Boost.Container* 依赖于非常基本的实用程序,如 Boost.Core 和 *Boost.Intrusive*。预处理代码大小已大幅减小,编译时间已缩短。
-
为具有随机访问迭代器的容器(
basic_string
除外)添加了nth
和index_of
函数。 -
添加了 C++17 的
allocator_traits<Allocator>::is_always_equal
。 -
更新了容器以实现 2210. allocator-aware 容器缺少 allocator-extended 构造函数 中指定的新构造函数。
-
源破坏性更改:
scoped_allocator_adaptor
的propagate_on_container_copy_assignment
、propagate_on_container_move_assignment
和propagate_on_container_swap
不再是::boost::integral_constant<bool, true/false>
类型。依赖关系重组需要打破这些类以避免 MPL 依赖,并且与std::integral_constant
的互操作性无法保证。假设boost::true_type/boost::false_type
的代码将无法编译。作为一种解决方法,请使用有保证的内部::value
常量:::boost::integral_constant<bool, scoped_allocator_adaptor<Allocator>::propagate_on_container_move_assignment::value>
。
-
-
Context:
-
支持 ARM/iOS (32+64 位)
-
class execution_context (C++14)
-
-
Conversion:
-
现在所有函数都使用
boost::throw_exception
抛出异常 -
文档更新
-
DateTime:
-
恢复了
to_time_t
函数。 -
将变量 v_type 重命名为 var_type,使其不再与 AIX 系统变量冲突。
-
文档修复。
-
-
Flyweight:
-
维护修复。
-
Fusion:
-
自动哈希创建函数 (Github PR #12)
-
新的 ADAPT_STRUCT、ADAPT_ADT、ADAPT_ASSOC_ 推导出成员类型 (#9516)。
-
为 Boost.Tuple 和 std::tuple 添加 convert 实现。
-
为 Boost.Tuple 和 std::tuple 添加 mpl::clear 实现。
-
使用 boost::declval 代替 std::declval, (#10190)。
-
删除对
boost::blank
的使用 (#8622)。 -
添加 result_of::{copy,move} (#5886)。
-
更好的 constexpr 和 noexcept 支持。
-
result_of::size::value 和 result_of::size::type::value 现在是相同的类型 (#7304)
-
修复了缺失的包含 (#8457)。
-
-
Geometry:
-
附加功能
-
新算法 num_segments,返回几何图形的线段数
-
is_valid 算法的新重载,它接受字符串引用作为第二个参数,并使用与几何图形的有效性或无效性相关的消息填充它
-
is_valid 算法的新重载,它接受枚举引用作为第二个参数,并使用与几何图形的有效性或无效性相关的值填充它
-
Disjoint 和 intersects 支持以下几何图形组合:点/多点、多点/多点、多点/线段、多点/框
-
-
改进
-
Buffer 现在支持线串的平端,其弯曲靠近起点(使得缓冲线段穿过平端)。
-
Buffer 性能显着提高
-
Partition 性能对于多边形显着提高,可能增强所有叠加操作
-
-
已解决的票证
-
#8379 行列式结果的无效比较
-
#10108 几何图形在一个点接触的特定情况下,叠加操作中出错
-
#10201 建议使用不同的函数来比较坐标 [wontfix]
-
#10467 模板参数名称与 termios.h 中定义的 B0 宏名称冲突
-
#10640 CCW 多边形的 buffer() 的无效结果。
-
#10666 MSVC 编译器警告 C4127:条件表达式是常量
-
#10747 重新缩放中的错误导致面积/面积设置操作中出错
-
#10770 Buffer 对于大距离或粗糙的圆形连接失败,其中凹面未正确相交
-
#10658 sym_difference 为 int 多边形产生错误结果
-
#10835 多线串和多边形的差异产生错误结果
-
#10861 Rtree 在 Value 是包含指向 Geometry 的指针的对或元组且使用了默认的 equal_to<> 时,无法编译
-
#10863 模板参数名称与 termios.h 中定义的 B0 宏名称冲突(10467 的重复项)
-
#10887 Linear/MultiPolygon 的 within() 和 relate() 的无效结果
-
#10890 Point/Segment 的 disjoint() 的无效结果。
-
#10904 relate_cartesian_segments 策略中线段的最重要维度的无效计算
-
#10912 Areal/Areal 的 within() 和 relate() 的无效结果
-
#10951 由于缺少 /bigobj 标志,测试在 windows 上使用 intel 编译器失败。
-
#10957 断言失败和各种关系操作的无效结果。
-
#10958 disjoint() L/L 和 L/A 的无效结果。
-
#10959 与 no_rescale_policy 一起使用时,get_turns() 中断言失败。
-
#10960 L/A 的 get_turns() 的无效结果,缺少 turn。
-
#10961 L/A 的 get_turns() 的无效结果,线性尖峰的无效 turn。
-
#11112 由于 CS 名称冲突(在此平台上用于宏),Solaris 上的编译失败
-
#11121 整数坐标的 difference() 的无效结果
-
-
Bugfixes
-
多点/多边形、多点/多边形距离计算中的错误(错误检测区域几何图形内部的点)
-
flatten_iterator 的赋值运算符中的错误导致访问冲突
-
笛卡尔线段-线段相交策略中的错误,当一个线段退化为一个点并且与另一个非退化线段共线时
-
centroid() 中的错误,如果为例如零面积的多边形计算,则结果不确定。
-
连接点数有限的连接的缓冲区中的错误
-
锐角周围点数有限的圆形连接的缓冲区中的错误
-
缓冲区距离大的连接的缓冲区中的错误
-
点数为奇数的圆形末端的缓冲区中的错误
-
缓冲区距离大的平端缓冲区中的错误
-
负缓冲区距离大的内部环缓冲区中的错误
-
当输入范围为空时,closing_iterator 中的错误无法正常工作
-
is_simple 中的错误,未正确处理多线串中封闭的简单线串
-
rtree 构造函数中的错误,它采用一对迭代器或范围(打包算法),当 Iterator 的引用不是真引用时,使用对已销毁的临时对象的引用,例如对于某些 Range Adaptors。它也影响 distance() 和 comparable_distance()。此错误可能导致 rtree 或 distance() 算法的意外行为,例如断言失败或 SEGFAULT。
-
rtree count() 成员函数中的错误,当传递类型可转换但与 value_type 或 indexable_type 不同的对象时,使用对已销毁的临时对象的引用。如果发生这种情况,可能会返回错误的结果,在大多数情况下为 0。
-
与 Ranges 的处理相关的错误,阻止在某些算法中使用非容器 Ranges 编译 Geometries(感谢 Samuel Debionne)
-
-
-
Interprocess:
-
减少了一些编译时依赖项。更新为 Boost.Container 更改。
-
-
Intrusive:
-
减少了编译时依赖项、头文件和 Boost.Preprocessor 的使用,特别是对于 hooks 和 iterators。
-
-
Math:
-
添加了两个新的特殊函数 - trigamma 和 polygamma。
-
对椭圆积分代码进行了大规模更新,以使用 Carlson 的最新算法 - 这些算法应该比以前更稳定、更准确且稍快。还添加了对 Carlson 的 RG 积分的支持。
-
添加了 ellint_d、jacobi_zeta 和 heuman_lambda 椭圆积分。
-
修复了命名空间作用域常量,使其在符合标准的编译器上为 constexpr,请参阅 #10901。
-
修复了不完全贝塔和伽玛函数以及椭圆积分中各种虚假的下溢/溢出情况,感谢 Rocco Romeo。
-
修复了 3 参数 legendre_p 和 legendre_q 函数,使其在最终参数实际上不是策略的情况下不调用基于策略的重载。
-
清理了不完全贝塔函数中的一些死代码,请参阅 #10985。
-
修复了极大值 pdf 对于大值输入的问题,请参阅 #10938。
-
切换文档以使用 SVG 而不是 PNG 图形和公式 - 浏览器似乎终于赶上了!
-
-
Move:
-
添加了
BOOST_MOVE_BASE
实用程序。 -
添加了
adl_move_swap
实用程序。 -
减少了对其他 Boost 库的依赖,以使该库更轻量级。
-
-
Multi-index Containers:
-
在查找操作涉及生成
key_type
的临时值的情况下,查找操作的效率得到了提高。考虑以下代码typedef multi_index_container< std::string, indexed_by< ordered_unique<identity<std::string> > > > multi_t; ... multi_t m=...; m.find("boost"); // passed a const char*, not a std::string
在库的早期版本中,find
操作生成了多个临时的std::string
(每次进行内部比较时都会生成一个)。在足够高级的编译器中,现在避免了这种情况,因此只创建一个临时对象。 -
维护修复。
-
-
Predef:
-
版本 1.2
-
添加了 Visual Studio 2015 检测。
-
添加了 Haiku OS 检测。
-
修复了 Android 字节序检测。
-
添加了
predef_check
程序和 BBv2 集成,用于构建配置检查。
-
-
Random:
-
添加了 non_central_chi_squared_distribution。
-
-
Thread:
-
版本 4.5.0
-
修复的错误
-
#6787 如果系统时间回滚,boost::thread::sleep() 会挂起
-
#10734 Submit 方法在不同的执行器上的工作方式不同,有些会抛出异常,有些会静默忽略错误 (thread_executor 和 inline_executor)
-
#10736 任务异常被静默忽略。我认为来自 N3785 和 std::thread 的 std::terminate 解决方案是更好的选择,也更一致。
-
#10737 在 serial_executor 中,如果任务抛出异常,我们会无限期等待。
-
#10822 Boost.Thread 无法在 Android 上编译
-
#10824 Boost.Thread 1.57 破坏了 Windows XP SP2 及更低版本的兼容性。
-
#10963 future<future<T>>::then 没有实现
-
#10964 future<future<T>>::unwrap().then() 死锁
-
#10968 async() 和 future::then() 返回的 future 不是阻塞的。
-
#10971 shared_future::get()/get_or() 必须是 const
-
#10972 shared_future::then() 可以被多次调用。
-
#10979 当 make_ready_future 参数为 reference_wrapper<T> 时,支持 T& 类型推导
-
#10996 Thread physical_concurrency() 在 Windows 上失败
-
#11035 BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE 未为 Android 定义
-
#11053 附加的代码导致 R6025 - run_thread_exit_callbacks 中的纯虚函数调用
-
-
-
TypeErasure:
-
修复了使用 MSVC 12 的编译。
-
-
TypeIndex:
-
在支持它的平台上添加了链接时断言
-
-
Units:
-
修复了具有任意维度的基本单位。
-
-
Variant:
-
破坏性更改:编译时检查的 getter 现在默认用于
boost::get<U>(VariantT)
和boost::polymorphic_get<U>(VariantT)
中。新的 getter 断言类型U
是可以存储在VariantT
中的类型之一。定义BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT
以更改默认行为。有关更多信息,请参阅 get.hpp 和 polymorphic_get.hpp 描述 #547。 -
在 Clang 上启用了可变参数模板 #10832
-
C++14 中访问者的返回类型的自动检测,这使得可以将
boost::apply_visitor
与泛型 lambda 一起使用 #10837auto str = boost::apply_visitor( [](auto v) { return boost::lexical_cast<std::string>(v); }, variant_instance );
-
改进了 swap 函数 #10882
-
对可变参数模板进行了许多改进,更多方法支持可变参数。
-
多次错误修复和测试改进,包括 Coveralls 集成
-
测试的编译器
Boost 的主要测试编译器是
-
Linux
-
Clang: 3.4
-
Clang, C++14: 3.5, 3.6
-
GCC: 4.4.7, 4.9.2
-
GCC, C++98: 4.8.1, 4.8.2
-
GCC, C++11: 4.4.7, 4.8.4, 4.9.2
-
GCC, C++14: 4.9.2
-
-
Windows
-
GCC, mingw: 4.4.7, 4.5.4, 4.6.3, 4.7.3, 4.8.2
-
Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0
-
-
FreeBSD
-
GCC: 4.2.1
-
-
QNX
-
QCC: 4.4.2
-
Boost 的其他测试编译器包括
-
Linux
-
Clang: 3.0, 3.1, 3.2, 3.3, 3.4
-
Clang, C++14: 3.5, 3.6
-
GCC: 4.4.7, 4.6.4, 4.7.3, 4.8.1, 4.9.2, 5.0.0 (experimental)
-
GCC, C++11: 4.4.7, 4.8.4, 4.9.2
-
GCC, C++14: 4.9.2
-
-
Windows
-
GCC, mingw: 4.4.7, 4.5.4, 4.6.4, 4.7.3
-
Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
-
-
Android
-
Clang: 3.4, 3.5
-
GCC: 4.8, 4.9
-
-
FreeBSD
-
GCC: 4.2.1
-
-
QNX
-
QCC: 4.4.2
-
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此版本。