版本 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 中修复。
-
Boost.Fusion 在使用非 constexpr 类型时存在回归问题。#11211 此问题已在以下 PR 中修复:Github PR #70,Github PR #71,Github PR #72
补丁
-
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 运行时的检测以与最新的 Windows SDK 一起使用。
-
-
Chrono:
-
版本 2.0.5
-
修复
-
#10778 VC14 CTP4 Atomic 在使用非 TriviallyCopyable 的 boost::chrono 持续时间时无法编译
-
#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. 用于分配器感知容器的缺失分配器扩展构造函数中指定的新构造函数。
-
源代码破坏:
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 位)
-
类 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 添加转换实现。
-
为 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)。
-
-
几何:
-
附加功能
-
新的算法 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 对于值为一对或一个包含指向 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 L/L 和 L/A 的 disjoint() 的无效结果。
-
#10959 在使用 no_rescale_policy 时,get_turns() 中出现断言失败。
-
#10960 L/A 的 get_turns() 的无效结果,缺少 turn。
-
#10961 L/A 的 get_turns() 的无效结果,线性尖峰的无效 turn。
-
#11112 由于 CS 名称冲突(在此平台上用于宏),导致 Solaris 上的编译失败
-
#11121 整数坐标的 difference() 的无效结果
-
-
错误修复
-
多点/多边形、多点/多面体距离计算中的错误(错误地检测到面积几何内部的点)
-
flatten_iterator 的赋值运算符中的错误导致访问冲突
-
当一个线段退化为点并且与另一个非退化线段共线时,笛卡尔线段-线段相交策略中的错误
-
centroid() 中的错误,如果为零面积的多边形计算,则产生不确定的结果。
-
具有有限数量点的连接的缓冲区中的错误
-
在尖角周围具有有限数量点的圆形连接的缓冲区中的错误
-
具有较大缓冲区距离的连接的缓冲区中的错误
-
具有奇数个点的圆形端点的缓冲区中的错误
-
具有较大缓冲区距离的平端缓冲区的错误
-
具有较大负缓冲区距离的内部环的缓冲区中的错误
-
当输入范围为空时,closing_iterator 无法正常工作的错误
-
is_simple 中的错误,没有正确处理多线串中的封闭简单线串
-
使用一对迭代器或 Range(打包算法)的 rtree 构造函数中的错误,当 Iterator 的引用不是真引用时,例如对于某些 Range Adaptor,使用了对销毁的临时对象的引用。它还会影响 distance() 和 comparable_distance()。此错误可能导致 rtree 或 distance() 算法的意外行为,例如断言失败或 SEGFAULT。
-
rtree count() 成员函数中的错误,当传递了类型可转换但与 value_type 或 indexable_type 不同的对象时,使用了对销毁的临时对象的引用。如果发生这种情况,可能会返回错误的结果,在大多数情况下为 0。
-
与范围的处理相关的错误,阻止在某些算法中使用非容器范围编译几何图形(感谢 Samuel Debionne)
-
-
-
进程间:
-
减少了一些编译时依赖。已更新为 Boost.Container 更改。
-
-
侵入式:
-
减少了编译时依赖、标头以及 Boost.Preprocessor 的使用,特别是对于挂钩和迭代器。
-
-
数学:
-
添加了两个新的特殊函数 - trigamma 和 polygamma。
-
对椭圆积分代码进行了大量更新,以使用 Carlson 的最新算法 - 这些算法应该比以前更稳定、更准确并且速度稍快。还添加了对 Carlson 的 RG 积分的支持。
-
添加了 ellint_d、jacobi_zeta 和 heuman_lambda 椭圆积分。
-
修复了命名空间范围常量,以便它们在符合要求的编译器上为 constexpr,请参阅 #10901。
-
修复了不完全 beta 和 gamma 函数以及椭圆积分中各种虚假的上溢/下溢情况,感谢 Rocco Romeo。
-
修复了 3-arg legendre_p 和 legendre_q 函数,以便在最后一个参数实际上不是策略时,不调用基于策略的重载。
-
清理了不完全 beta 函数中的一些死代码,请参阅 #10985。
-
修复了较大值输入时的极值 pdf,请参阅 #10938。
-
将文档切换为使用 SVG 而不是 PNG 图形和方程 - 浏览器似乎终于赶上了!
-
-
移动:
-
添加了
BOOST_MOVE_BASE
实用程序。 -
添加了
adl_move_swap
实用程序。 -
减少了对其他 Boost 库的依赖,使库更轻量。
-
-
多索引容器:
-
在查找操作涉及生成
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 操作系统的检测。
-
修复了 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() 返回的 futures 不是阻塞的。
-
#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 附加的代码导致在 run_thread_exit_callbacks 中出现 R6025 - 纯虚函数调用
-
-
-
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 (实验性)
-
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 管理了此版本。