版本 1.50.0
2012 年 6 月 28 日 12:48 GMT
文档
补丁
-
Boost.Unordered 补丁 - 修复了在使用 C++11 编译器但 C++03 分配器编译时的一个错误。在插入元素时,
allocator_traits 检测到节点可以使用意外的隐式转换来构造,这会导致一些问题。
-
Locale 补丁 - 修复了一个错误,该错误导致
boost::locale::utf::utf_traits 接受了某些无效的 UTF-8 序列,这可能是一个安全漏洞。
新库
更新的库
-
Accumulators:
- 添加了缺失的
#include <boost/throw_exception.hpp>,修复了 #6702。
- 为 msvc 提供的解决方法,允许构造函数模板成为拷贝构造函数,修复了 #6535。
- 缩短文件名以符合 Boost 指南,修复了 #6196。
-
Array:
- 添加了对 Boost.Hash 的支持 #6791。
-
Asio:
- 将
epoll_reactor 后端更改为对 EPOLLOUT 事件进行延迟注册。
- 修复了
epoll_reactor 对带外数据的处理,该处理在上一版本中因不完整的修复而损坏。
- 将 Asio 的 SSL 包装器更改为尊重 OpenSSL 的
OPENSSL_NO_ENGINE 功能测试 #define (#6432)。
- 修复了
windows::object_handle,使其可以与支持 C++11 移动语义的 Windows 编译器(如g++).
- 提高了 strand 重调度的性能。
- 增加了对g++4.7 的支持,当以 C++11 模式编译时 (#6620)。
- 修复了当
io_service 使用 concurrency_hint 为 1 构建时,signal_set 处理器未被传递的问题 (#6657)。
-
Bimap:
- 移除了对 Boost.Serialization 的多余依赖,修复了 #3868。
- 解决了未使用的构造函数参数警告,修复了 #5749。
- 为 map 视图添加了 key_type 和 mapped_type (为向后兼容保留了 data_type) typedef,修复了 #6031。
-
Chrono:
- 修复的 Bug
-
#6361 在 Windows 32 位系统下,boost::chrono::process_real_cpu_clock::now() 存在整数溢出。
-
#6628 process_cpu_clocks.hpp 中的编译器警告。
-
#6666 thread_clock.hpp 需要 pthread.h。
-
Concept Check:
-
Filesystem:
- 从发行版中移除了 Filesystem V2。现在 V3 是唯一分发的版本。敦促仍在使用 V2 的用户尽快迁移到 V3。
- 为 class path 添加了 constexpr value_type preferred_separator。
- 修复了 #5118,
replace_extension 的行为与文档不符。文档、实现和测试用例都已进行修复。文档未能提及任何现有扩展名都会被移除。简单情况下的行为已恢复到 V2 的行为,但进行了修正,以便复杂的替换现在能够正常工作。已添加来自 #5118 的两个测试用例。
- 修复了 #3737,Boost.Filesystem 在 Windows Mobile 上无法编译。在 Windows 上,不再包含
<sys/stat.h>。
- 修复了 #4065,Boost Filesystem 的字典序路径比较不一致。这需要多个源代码 bug 修复和代码清理,纠正了与字典序无关的问题。
- 为 class path 添加了成员函数 compare,以与 std::string 保持一致。
- 在
filesystem/config.hpp 中收紧了 BOOST_FILESYSTEM_DYN_LINK 和 BOOST_FILESYSTEM_STATIC_LINK 的逻辑,以便始终定义其中一个,而同时定义两者会触发 #error。
- 修复了 #6690 和 #6737,解决了与 VC++ 8 到 11 相关的静态链接问题。请注意,此修复可能会重新引入 codecvt 线程安全问题 (#4889, #6320),对于这些编译器,如果使用静态链接。
- 添加了
path::operator+= 和 concat 函数,用于附加后缀或数字。由 Ed Smith-Rowland 等人建议。
- 修复了 #6809,MS Windows 的
filesystem::rename() 方法实现错误,通过添加 MOVEFILE_COPY_ALLOWED 来处理跨驱动器、卷、文件系统的重命名。此修复对非 Windows 系统没有影响。
- 修复了 #6819,源为单字符数组的路径操作数被视为空,即使它并非为空。这种数组可能出现在联合体或使用 C 变长数组惯用法中的代码里。
- 修复了 #6932,即使指定了
error_code,create_directories 也会抛出异常。
-
Foreach:
-
几何:
- 修复的 Bug
- 可比较的投影点策略对整数点的返回类型不正确 (整数),已修复。
- 修复了片段和多边形相交处的若干鲁棒性问题。
- 已过滤掉无效的相交输出。
- 修复了 multi_polygon 的 disjoint 可能错误地返回 true 的问题。
- 已解决的工单
-
6585 适用于 alternative syntax multipoint 的补丁,已应用。
-
6584 适用于 distance 中 bug 的补丁,已应用。
-
5730 与 6584 同一个问题,已修复。
-
6166 适用于缺失转换的补丁,已应用。
-
6696 无效的相交输出,在报告之前 (碰巧) 已经在 Trunk 中修复。
- 附加功能
- 为 *polygon/*polygon 添加了算法 "touches" (符合 OGC SF 标准)。
-
图:
- 修复的 Bug
-
#4622 在具有自环的顶点上调用 clear_vertex 会导致段错误。
-
#6033 biconnected_components(...) 计算的 lowpoint map 有时是错误的。
-
#6242 同构性没有重置映射。
-
#6435 cube_topology 文档应指明 3D,而非 2D。
-
#6520 graph_parallel 文档中的 small_world_1_70_6_0p02.png 已损坏。
-
#6564 BGL 子图的复制构造函数不跟踪局部顶点/边。
-
#6573 BGL: boost::isomorphism 例程在大图上失败。
-
#6583 Dijkstra Visitor Concept 文档可能显示了错误的变量类型。
-
#6647 BGL strong_components 在 MSVC 8 上无法编译。
-
#6656 子图中的依赖类型在使用时未加 typename。
-
#6707 is_straight_line_drawing.hpp 缺失 #include <map>。
-
#6708 是否将 is_straight_line_drawing.hpp 中的 bool boost::intersects() 设为内联?
-
#6739 无法使用 write_graphviz_dp 处理 constified 的子图。
-
#6858 g++ 错误解析了 boost::get() 的调用。
-
#6892 bron_kerbosch_all_cliques() 未要求 VertexIndexGraph 概念。
- Trac 中未记录的其他 bug 和警告。
-
哈希:
- 支持
std::array 和 std::tuple (当可用时) (#6806)。
- 避免 gcc 的
-Wfloat-equal 警告 (#6771)。
- 向长期弃用的
boost/functional/detail/container_fwd.hpp 添加了弃用警告。
-
Iostreams:
- 改进了 gzip 支持 (#5908)。
- 更新了 Boost.Filesystem 和 Boost.Test 的最新测试。
- 修复了一些文档错误 (#6530, #6650)。
-
Iterator:
- 修复了
-
#5127 transform_iterator 中 result_of 用法不正确。
-
#5697 iterator_facade::operator-> 对于代理引用是错误的。
-
MultiArray:
- Concepts bug 修复和 Visual Studio 2010 的解决方法 (#4874)
- 修复了 assert.cpp 测试用例 (补丁)
-
Lexical cast:
-
boost::bad_lexical_cast 异常现在全局可见,即使代码使用 -fvisibility=hidden 编译也可以捕获。
- 现在可以禁用异常编译和使用库 (#5800)
- 提高了
boost::iterator_range<character_type*> 转换的性能,减少了内存使用,并修复了 bug。
- 修复的 Bug 和警告: #6645, #6562, #6812, #6852, #6717, #6770, #6504。
-
Locale:
- 修复了使用 STLPort 库时的构建问题。
- Boost.System 现在是必需的依赖项。
- 修复了 Bug #6635, #6833
-
数学:
- 将数学常数提升为一等公民,包括通过三个命名空间方便地访问最广泛使用的内置浮点数、双精度数和长双精度数。
- 添加了 Benjamin Sobotta 编写的 Owen's T 函数和 Skew Normal 分布。
- 添加了 Hankel 函数。
- 根据 K R Walker 提交的补丁,纠正了 #6627 nonfinite_num_put 格式化 0.0 不正确 的问题。
- 更改了常量初始化机制,使其对用户定义类型也具有线程安全,并使用户定义类型能够获得常量的完整精度,即使
long double 不支持。因此,例如 128 位有理数近似值与 UDT 一起使用时将正常工作,即使 long double 可能只有 64 或 80 位。
- 修复了
bessel_jy 中的问题,该问题导致 Y[sub 8.5](4[pi]) 产生 NaN。
-
MSM:
-
Program Options:
-
PropertyMap:
- 修复的 Bug
-
#6539 get() 的返回类型未正确记录。
-
#6721 property_map_traits 文档未提及引用。
-
Proto:
- 仅当编译器实现 N3276 时,才使用基于
decltype 的 result_of。
- 对于 C++11,强制将
mpl::eval_if_c 和 mpl::if_c 的参数设为 bool。
- 禁用'__forceinline not inlined'msvc 上的警告。
-
Ratio:
- 修复的 Bug
-
#6498 boost::ratio 在默认设置下无法编译。
-
ScopeExit:
- 新功能
- 使用可变参数宏指定逗号分隔的捕获列表 (但为了向后兼容,保留了预处理器序列语法)。
- 使用
this_ 捕获作用域中的对象。
- 使用
void 支持空捕获。
- 在支持 C++11 lambda 函数的编译器上,使用
BOOST_SCOPE_EXIT_ALL 进行隐式 lambda 式捕获。
-
Thread:
- 新功能
-
#1850 请求提供与 lock_guard 相辅相成的 unlock_guard。
-
#2637 请求提供 shared_mutex 持续时间 timed_lock 和 timed_lock_shared。
-
#2741 提案管理可移植和不可移植的线程属性。
-
#3567 请求提供 shared_lock_guard。
-
#6194 适应 Boost.Move。
-
#6195 C++11 合规性:使用 Boost.Chrono 提供标准的日期时间接口。
-
#6217 增强 Boost.Thread 的共享互斥接口,遵循 Howard Hinnant 的提案。
-
#6224 C++11 合规性:在支持的编译器上添加 standard noexcept 的使用。
-
#6226 C++11 合规性:从锁中添加显式 bool 转换。
-
#6228 添加带有分配器的 promise 构造函数,遵循 C++11 标准。
-
#6230 C++11 合规性:遵循 C++11 定义的异常报告机制。
-
#6266 破坏性更改:如果线程可 join,则线程析构函数应调用 terminate。
-
#6269 破坏性更改:如果线程可 join,则线程移动赋值应调用 terminate。
-
#6272 C++11 合规性:添加 thread::id 的 hash 特化。
-
#6273 C++11 合规性:添加 cv_status enum class 并将其用于条件等待函数。
-
#6231 在文档中添加 BasicLockable 要求,以遵循 C++11。
-
#6342 C++11 合规性:将 one_flag 适配到 C++11 接口。
-
#6671 upgrade_lock:缺失 mutex 和 release 函数。
-
#6672 upgrade_lock:缺少来自时间相关类型的构造函数。
-
#6675 upgrade_lock:缺少非成员 swap。
- 添加了缺失的 packaged_task::result_type 和 packaged_task:: 带有分配器的构造函数。
- 添加了 packaged_task::reset()
- 修复的 Bug
-
#2575 Bug - Boost 1.36.0 在 Itanium 平台上的问题。
-
#4345 thread::id 和线程级联时的 join 问题。
-
#4921 BOOST_THREAD_USE_DLL 和 BOOST_THREAD_USE_LIB 至关重要,需要记录。
-
#5013 文档:boost::thread: pthreas_exit 导致 terminate()。
-
#5173 boost::this_thread::get_id 速度非常慢。
-
#5351 中断 future get 时出现 boost::unknown_exception。
-
#5516 当存在另一个读锁时,upgrade lock 在前一个 upgrade lock 释放后未被获取。
-
#5990 shared_future<T>::get() 返回类型错误。
-
#6174 packaged_task 未正确处理移动结果。
-
#6222 SunStudio 编译错误:unique_future 移动。
-
#6673 shared_lock:移动赋值在 c++11 下无效。
-
#6674 shared_mutex:try_lock_upgrade_until 无效。
- 修复了 task_object(task_object const&) 在存在 task_object(task_object&&) 的情况下 ML 上报告的问题。
-
Unordered:
- 修复了
unordered_multiset 和 unordered_multimap 的相等性。
- 实现
reserve (#6857)。
- 避免 gcc 的
-Wfloat-equal 和 -Wshadow 警告 (#6190, #6771)。
- 修复了 bcp 的命名空间问题 (#6905)。
- 修复了 Sun 的解决方法 (#6784)。
- 存储桶分配的一些内部更改。
- 请参阅 变更日志 以获取完整详细信息。
-
Wave:
-
xpressive:
- 用一个稍微不那么丑陋的
lexical_cast 方式替换了非常丑陋的 hack。
- 将 MPL assert 替换为 static assert,因为它在 C++11 中存在问题,修复了 #6846。
测试的编译器
Boost 的主要测试编译器是:
- Linux
- Intel: 11.1
- LLVM Clang 2.8
- GCC: 4.2.4, 4.3.4, 4.4.3, 4.5.3, 4.6.2
- GCC, C++0x 模式: 4.3.4, 4.4.3, 4.5.3, 4.6.2
- OS X
- Intel: 11.1
- GCC: 4.4.4
- GCC, C++0x 模式: 4.4.4
- Windows
- Visual C++ 8.0, 9.0, 10.0
- GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.1, 4.7.0
- FreeBSD
- QNX
- QCC, C++0x 模式: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0
Boost 的其他测试编译器包括:
- Linux
- Clang 从 subversion
- GCC: 4.2.4, 4.3.4, 4.4.4, 4.5.3, 4.6.2
- GCC, C++0x 模式: 4.3.4, 4.4.4, 4.5.3, 4.6.2
- pgCC: 11.9
- Intel: 10.1, 11.1, 12.0, 12.1
- Visual Age 10.1
- OS X
- Clang 从 subversion
- Intel 11.1, 12.0
- GCC: 4.4.4
- GCC, C++0x 模式: 4.4.4
- Windows
- Visual C++ 8.0, 10.0
- Visual C++ with STLport: 9.0
- Visual C++, Windows Mobile 5, with STLport: 9.0
- GCC, mingw: 4.4.0, 4.4.7, 4.5.2, 4.5.4, 4.6.4, 4.7.0
- GCC, C++0x 模式, mingw: 4.5.2
- AIX
- IBM XL C/C++ Enterprise Edition, V12.1.0.0
- FreeBSD
- Solaris
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此次发布。