版本 1.55.0
2013 年 11 月 11 日 19:50 GMT
文档
其他下载
新闻
对某些非常旧的编译器版本,Config 的支持已被移除。新的最低要求是:
- Digitial Mars 8.41
- GCC 3.3
- Intel 6.0
- Visual C++ 7.1
注意:这仅是 Config 的最低要求。某些 Boost 库可能有更高的最低要求,并且不支持所有平台或编译器。
其他编译器目前保持不变,但我们正在考虑移除对其他一些旧编译器的支持。将要移除的**候选**编译器是:
- Metroworks C++ (例如:codewarrior)
- SunPro 5.7 及更早版本
- Borland C++ Builder 2006 (5.82) 及更早版本
如果您正在使用这些编译器中的任何一个,请通过邮件列表告知我们。在做出决定之前,我们将考虑收到的所有反馈。
Visual Studio 2013 / Visual C++ 12 的已知 Bug
Visual Studio 2013 在发布流程中发布得相当晚,因此存在一些未解决的问题。其中包括:
- Serialization 因缺少头文件而无法编译。
- 从 Boost.Container 的
allocator_traits 中使用 has_member_function_callable_with 会导致编译错误(#9332)。
- 在 Unordered 和 MultiIndex 等库中,使用初始化列表调用重载函数可能会导致编译错误,Visual C++ 会声称重载函数不明确。这是 Visual C++ 的一个 Bug,尚不清楚是否有好的解决方法。这不会影响不使用初始化列表的代码,或者使用不需要隐式转换的初始化列表的代码(即与容器值类型完全匹配的初始化列表)。
- Thread:
ex_scoped_thread 编译失败(#9333)。
补丁
-
Log 补丁:修复了当在启用 AVX2 的 CPU(例如 Intel Haswell)上使用
dump 操纵器时输出不正确的问题。
新库
- Predef:
- 该库根据 C、C++、Objective C 和 Objective C++ 的预定义宏或通用头文件中收集的信息,定义了一组编译器、架构、操作系统、库和其他版本号,由 Rene Rivera 提供。
更新的库
-
Accumulators:
-
Any:
-
boost::bad_any_cast 异常现在可以跨模块可见 #8751。
- 添加了
clear() 成员函数。
- 添加了缺失的
BOOST_NOEXCEPT。
- 修复了 const rvalue 的问题 #9215。
-
Asio:
- 实现了对 Windows Runtime 的有限移植。此支持要求启用语言扩展。由于 Windows Runtime API 暴露的设施受限,此移植还附带以下注意事项:
- 核心功能,如
io_service、strand、缓冲区、复合操作、定时器等,应该都能正常工作。
- 对于套接字,仅支持客户端 TCP。
- 不支持客户端 TCP 套接字的显式绑定。
- 套接字不支持
cancel() 函数。异步操作只能通过关闭套接字来取消。
- 不支持使用
null_buffers 的操作。
- 仅支持
tcp::no_delay 和 socket_base::keep_alive 选项。
- 解析器不支持服务名称,仅支持数字。即,您必须使用 "80" 而不是 "http"。
- 大多数解析器查询标志无效。
- 修复了一个回归(在 Boost 1.54 中引入),在该回归中,在某些平台上,
async_connect 的错误未能正确传播到完成处理器(#8795)。
- 修复了一个 Windows 特有的回归(在 Boost 1.54 中引入),当多个线程运行
io_service 时会发生此问题。当 Bug 出现时,异步操作的结果(错误和传输字节数)会被错误地丢弃并使用零值代替。对于 TCP 套接字,这会导致虚假的 EOF 通知(#8933)。
- 修复了处理程序跟踪中的一个 Bug,该 Bug 无法正确打印某些处理程序 ID(#8808)。
- 修复了用于测试同步接受操作成功的比较,使其能正确处理无符号套接字描述符(#8752)。
- 确保在信号已被引发时启动
async_wait 时,信号编号能正确传递给完成处理器(#8738)。
- 抑制了 g++ 4.8+ 关于未使用 typedef 的警告(#8980)。
- 为使用默认调用挂钩的处理程序启用了移动优化(#8624)。
- 明确了程序不得发出重叠的
async_write_at 操作(#8669)。
- 将 Windows
HANDLE 后端更改为将 ERROR_MORE_DATA 视为非致命错误,当该错误在同步读取时由 GetOverlappedResult 返回时(#8722)。
- Visual C++ 语言扩展使用
generic 作为关键字。当这些语言扩展生效时,添加了一个解决方法,将命名空间重命名为 cpp_generic。
- 修复了某些异步操作在 Boost 1.54 中未能获得
async_result 支持的问题。特别是,缓冲区流模板已更新,以符合当前的处理程序模式(#9000, #9001)。
- 为 Microsoft Visual Studio 2012 启用了移动支持(#8959)。
- 为 Microsoft Visual Studio 2012 添加了
use_future 支持。
- 从 Windows IOCP 后端移除了对
std::min 的使用,以避免对 <algorithm> 头文件的依赖(#8758)。
- 消除了某些不必要的数据复制。
- 修复了代码和文档中的各种细微和外观问题(包括 #8347, #8950, #8953, #8965, #8997)。
-
Atomic:
- 为 GCC、MSVC 和兼容编译器在 x86 目标上添加了对 64 位原子操作的支持。当在编译时已知目标 CPU 支持所需指令时,将启用此支持。
- 为 GCC 和兼容编译器在 x86-64 目标上添加了对 128 位原子操作的支持。当在编译时已知目标 CPU 支持所需指令时,将启用此支持。可以使用新的
BOOST_ATOMIC_INT128_LOCK_FREE 宏来测试此支持。
- 添加了基于 GCC 4.7 起可用的
__atomic* 内置函数的更高效的 atomic<> 实现。
- 添加了对更多 ARM v7 CPU 的支持,改进了 Thumb 2 的检测。
- 为 GCC 和兼容编译器在 x32(即指针为 32 位、x86 64 位)目标上添加了支持。
- 移除了对 Boost.Thread 的依赖。
- 内部锁池现在包括适当的填充和对齐,以避免伪共享。
- 修复了在 Windows 上使用 Intel 编译器时的编译问题。移除了在 Windows 上编译时的内部宏重复。
- 一些代码重构,在可用时使用 C++11 特性。
-
Chrono:
-
修复 Bug
-
#7868
chrono_io 解析时间不正确(1.53 和 1.52)
-
#9028
boost/chrono/stopwatches/formatters/base_formatter.hpp 中的拼写错误
-
#9147 未初始化的
std::tm
-
Circular Buffer:
- 添加了对右值引用的支持以及使用 Boost.Move 的右值引用仿真。当值类型具有 noexcept 移动构造函数和 noexcept 移动赋值运算符时,值会被移动 #7888。现在,Circular Buffer 可与仅移动类型一起使用。
- 文档得到极大改进。
-
#5362 circular_buffer 在使用
BOOST_NO_EXCEPTIONS 时无法编译。
-
#7025 编译时,circular buffer 报告警告:“忽略了函数返回类型上的类型限定符”。
-
#7950 消除 VS2005 下的 W4 警告 - warning C4913: 存在用户定义的二进制运算符 ',' 但没有重载能够转换所有操作数,使用了默认的内置二进制运算符 ','。
-
Config:
-
破坏性变更:移除了对某些旧编译器的支持。新的最低编译器版本是:
- Digitial Mars 8.41
- GCC 3.3
- Intel 6.0
- Visual C++ 7.1
其他编译器未改变。
-
Container:
-
Context:
-
Coroutine:
-
Filesystem:
-
Fusion:
-
#8759
convert_impl 对 map_tag 的特化
-
几何:
-
附加功能
- 为线段类型添加了质心
- 为线段-框和线串-框添加了 intersects() 和 disjoints()
- 通过打包算法添加了 rtree 创建
- 添加了 contains() 和 covers() 空间查询谓词
- 添加了迭代查询
-
错误修复
- 在某些情况下调用了 .back() 或 .clear(),违反了 Concepts 的使用。已修复报告的案例
-
已解决的工单
-
6958 相交生成自相交。由尖峰引起,已修复
-
8364 无效输入异常,由先前步骤中的尖峰引起,已修复
-
8365 无效输入异常,由先前步骤中的尖峰引起,已修复
-
8969 boost::geometry::model::point 单参数构造函数应为 explicit
-
8825 添加成员变量文档到 doxygen_xml2qbk 的补丁
-
8652 三角形-三角形相交失败。由尖峰引起,已修复
-
9047 Boost 文件包含自身(strategies/intersection.hpp),已修复
-
图:
-
void 不再允许作为捆绑属性类型(例如,在图类型的 VertexProperties 模板参数中);它以前不可靠,但现在已通过静态断言完全禁止。请改用 boost::no_property。
- 在深度优先搜索中添加了对
finish_edge 访问器事件点的支持;此更改应向后兼容没有该成员函数的访问器。
- 禁用在 Sun 编译器上构建测试。
- 非命名参数版本的
breadth_first_visit、breadth_first_search、dijkstra_shortest_paths 和 dijkstra_shortest_paths_no_init 支持多个源顶点。此功能尚未记录;要使用它,请将这些函数中源顶点的单个参数替换为两个相同类型的输入迭代器,其中包含要使用的源顶点。
- 添加了 Hawick circuits 算法;由 Louis Dionne 贡献。
- 添加了边着色算法;由 Maciej Piechotka 贡献。
- 添加了最小成本最大流算法;由 Piotr Wygocki 贡献。
- 修复了 Trac 中的 Bug 和功能请求:#5269, #8317, #8433, #8791, #8877, #8986, #9012, #9080。
-
哈希:
- 简化了 SFINAE 检查,使其有望在 Sun 5.9 上工作(#8822)。
- 抑制 Visual C++ 无限循环警告(#8568)。
-
Interprocess:
-
Intrusive:
-
破坏性变更:已弃用 splay 容器中的
xxx_dont_splay 函数。已弃用 splay 容器中的 splay_set_hook,请改用 bs_set_hook。两者都将在 Boost 1.56 中移除。
-
ABI 破坏性变更:哈希容器的 end 迭代器被实现为指向存储桶数组的末尾之后(参见 #8698),这导致当要插入的值被分配在存储桶数组旁边时出现严重 Bug。End 迭代器的实现已更改为指向存储桶数组的开头。
- 大规模重构,以减少模板和调试符号的膨胀。在 Debug 模式下,MSVC 编译器的测试对象文件大小减半。没有 Identical COMDAT Folding (ICF) 的工具链应能看到尺寸的改进。
- 实现了 SCARY 迭代器。
-
Lexical cast:
-
std::bad_alloc 异常现在不会被转换为 boost::bad_lexical_cast #8966。
- 添加了静态断言,用于检查
std::numeric_limits 的特化(如果转换需要)。使用 BOOST_HAS_INT128 来检测 128 位整数支持 #8790。
- 文档得到改进,并添加了更多使用示例。
-
Log:
- 一般性更改
- 添加了一个新的配置宏
BOOST_LOG_WITHOUT_DEFAULT_FACTORIES。通过定义此宏,用户可以禁用用于设置解析器的默认过滤器和格式化工厂的编译。这可以显著减小二进制文件大小,同时仍保留对设置解析器的支持。
- 重写了一些解析器,以减小编译后的二进制文件大小。重写的解析器在检测歧义和不正确输入方面更加健壮。
- 以下头文件已弃用:
boost/log/utility/intrusive_ref_counter.hpp, boost/log/utility/explicit_operator_bool.hpp, boost/log/utility/empty_deleter.hpp。这些头文件将在未来的版本中移除。这些头文件的内容已移至其他库。
- 错误修复
- 修复了在 Windows 上,当线程争用严重且使用
QueryPerformanceCounter API 时,timer 属性生成的时间读数不正确的问题。
- 修复了过滤器解析器中的一个 Bug,该 Bug 阻止了将解析后的过滤器与某些属性一起使用。
- 修复了默认接收器和格式化器之间的线程 ID 格式化差异。
- 关闭的工单:#8815, #8819, #8915, #8917, #9139, #9140, #9153, #9155。
- 有关更多详细信息,请参阅 更改日志。
-
数学:
- 抑制了大量警告(主要来自 GCC-4.8 和 MSVC)#8384, #8855, #9107, #9109。
- 修复了 PGI 编译问题 #8333。
- 修复了 PGI 常量值初始化问题,该问题导致 erf 生成不正确的结果 #8621。
- 防止 C99 宏(同时也是 C++ 函数)的宏展开 #8732 和 #8733。
- 修复了 Student's T 分布在自由度非常大(大于可表示的最大整数)时表现不正确的问题 #8837。
- 使某些核心函数可与
long double 一起使用,即使平台没有标准的库 long double 支持 #8940。
- 修复了分布的错误处理,以在随机变量为无穷大时捕获无效的尺度和位置参数 #9042 和 #9126。
- 为 Intel C++ 14 中的损坏的 <tuple> 添加了解决方法 #9087。
- 改进了椭圆积分中参数约简的一致性 #9104。
- 修复了不完全 Beta 函数逆计算中的 Bug,当 Beta 函数实际上是 arcsine 或 Student's T 分布时,会导致抵消误差。
- 修复了 Bessel I 和 K 函数连分式中的问题,该问题导致了虚假的过载/欠载。
- 根据 Thomas Luu 的贡献,改进了非中心卡方分布分位数。
-
Move:
-
Meta State Machine:
- 新功能:中断状态现在支持一系列事件来结束中断。
- 修复了 Trac #8686。
-
Multiprecision:
- 添加了对 Boost.Serialization 的支持。
- 抑制了一些 GCC 警告。请参阅 8872。
- 修复了 pow 函数对大整数参数的 Bug。请参阅 8809。
- 修复了 pow 函数计算 0[super N] 的 Bug。请参阅 8798。
- 修复了固定精度 cpp_int IO 代码中的 Bug,该 Bug 导致当位计数非常小时(小于 CHAR_BIT)转换到字符串失败。请参阅 8745。
- 修复了 cpp_int 中的 Bug,该 Bug 导致当固定精度类型溢出时,左移失败。请参阅 8741。
- 修复了 cpp_int 中的一些外观警告。请参阅 8748。
- 修复了对 C99 中要求为宏的函数的调用。请参阅 8732。
- 修复了导致从 INT_MIN、LONG_MIN 等构造失败的 cpp_int Bug。请参阅 8711。
-
多索引容器:
- Boost.MultiIndex 已达到更高水平的 C++11 合规性。
-
multi_index_container 现在可以高效地移动。
- 支持初始化列表。
- 提供了 emplace 函数。
- 支持不可复制的元素(例如
std::unique_ptr<T>)。这包括插入一个范围 [first,last),其中迭代器指向可转换为元素类型的类型:在此过程中不发生复制构造。
- 随机访问索引提供
shrink_to_fit()。
请参阅 特定编译器 部分,了解对 C++11 之前的编译器的限制。
- 以下类已被弃用
- 维护修复。
-
MPI:
- 替换了对已弃用 MPI 函数的调用
- 添加了对多线程初始化的支持
- 添加了就地集合操作
-
Phoenix:
-
#9049
phoenix::function 构造函数是 constexpr。
-
多边形:
- 使用 Sebastien Loriot 的补丁更新了 Voronoi 基准测试的 CGAL 部分。更新了文档。
- 为 polygon_90_set_data 容器添加了多边形分解功能(来自 Intel 的补丁)。更新了文档。
- 修复了 Trac 中的 Bug:#8197。
-
PropertyMap:
dynamic_properties 对象现在可以通过非破坏性地链接 .property(name, pm) 调用来构建。示例:boost::dynamic_properties()
.property("color", color_map)
.property("pos", position_map)
- 不推荐使用原始指针作为属性映射;过去它经常在 Visual Studio 中失败。此用法已从 Boost.Graph 的所有测试和示例中删除。在图中使用顶点属性(此功能最常见的用途)的替代方法是:
boost::make_iterator_property_map(
<pointer or container .begin() iterator>,
get(boost::vertex_index, <graph object>))
(注意:此代码中 get() 的缺少命名空间限定对于泛型代码是必需的)。在图上下文之外,最接近的等价物是:boost::make_iterator_property_map(
<pointer>,
boost::typed_identity_property_map<std::size_t>())
在 <boost/property_map/property_map.hpp> 的第 151 和 159 行有注释掉的静态断言,可以取消注释以查找用户代码中已弃用的指针用法。
-
Rational:
- 为单元测试代码添加了
lowest 和 max_digits10,它们是 std::numeric_limits 在 C++11 中添加的成员。在 C++11 模式下编译 Boost.Test 时需要此项,因为它引用了其中一个。
- 更改了某些内部变量的初始化,使其不会发生窄化转换,这修复了问题 #5855。由于 C++11 中窄化转换是错误,因此需要此项。
-
SmartPtr:
- 添加了
boost/smart_ptr/intrusive_ref_counter.hpp 头文件,该文件从 Boost.Log 中提取。该头文件实现了一个混入基类,为用户类添加了对 intrusive_ptr 的支持。
-
Thread:
-
新功能
-
#8519 Synchro:使用完成函数更新 barrier 类。
-
#8515 Async:添加
shared_future::then。
-
#8519 Synchro:使用完成函数更新 barrier 类
-
#8615 Async:用 make_ready_future 替换 make_future/make_shared_future。
-
#8627 Async:添加 future<>::unwrap 和解包构造函数。
-
#8677 Async:添加 future<>::get_or。
-
#8678 Async:添加 future<>::fallback_to。
-
#8891 upgrade_to_unique_lock:缺少 mutex() 函数。
-
#8955 请求更高效地从 future 获取 exception_ptr。
-
修复 Bug
-
#7461 detail::win32::ReleaseSemaphore 可能以 count_to_release 等于 0 的值调用
-
#8070 优先使用 GetTickCount64 而不是 GetTickCount
-
#8768 win32 condition_variable::wait_until 在罕见情况下会无限等待。
-
#8817 Boost Thread Windows CE _createthreadex 处理 breaks mingw w64。
-
#8943 在 Intel C++ Composer XE 2013 for Windows 上使用 boost::call_once 的代码编译失败。
-
#8931 external_locking 引用中的拼写错误。
-
#9029 文档中的印刷错误。
-
#9037 gcc -Wshadow 在 condition_variable{,_fwd}.hpp 中产生警告。
-
#9041 Boost.Thread DSO 可能需要链接 Boost.Atomic。
-
#9048 boost::scoped_thread 带有可变参数模板参数的无用构造函数。
-
#9079 对于某些时间点值,Condition variable 将永远等待(Win)。
-
Timer:
- 修复了在 Intel 编译器上的编译 #8956。
-
Type Traits:
- 添加了
is_copy_contructible trait #8802。
-
Unordered:
- 避免了一些警告(#8851, #8874)。
- 避免在迭代器上通过 ADL 暴露一些详细函数。
- 解决了 Visual Studio 2013 中的可变参数 Bug。编译器在处理初始化列表时仍有问题,但可能无法解决这些问题。
-
Utility:
-
boost::result_of 可以设置为默认使用 TR1 协议,并在函数对象不支持时回退到 decltype(例如 C++11 lambda 函数)。定义配置宏 BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK 以启用此模式。
- 改进了
boost::base_from_member 类模板对 C++11 的支持。该类实现了构造函数参数的完美转发,前提是编译器支持右值引用、可变参数模板和函数模板默认参数。
- 添加了
boost/utility/explicit_operator_bool.hpp 和 boost/utility/empty_deleter.hpp 头文件,它们从 Boost.Log 中提取。这些头文件分别实现了用于定义显式转换为 bool 的运算符和一个不执行任何操作的删除器函数对象。
-
Variant:
- 修复了带 const rvalue 输入参数的构造函数和赋值运算符的编译 #8988。
- 修复了当其中一个变体模板类具有 nothrow 复制构造函数和抛出移动构造函数时,移动赋值运算符的编译 #8772。
- 修复了在禁用异常的环境下的编译 #8717。
- 修复了不可达代码警告 #8665。
- 移除了重复代码 #7601。
-
Wave:
-
xpressive:
-
#8843 不完整的字符集时抛出异常而不是断言
-
#8880 移除未使用的局部 typedef
-
#8882 使用 RAII 代替 sequence_stack.hpp 中的 try/catch
-
#8474 使 xpressive 与 clang 的 -Wimplicit-fallthrough 诊断兼容
更新了工具
测试的编译器
Boost 的主要测试编译器是:
- Linux
- Clang:3.3, 3.2, 3.1, 3.0
- Clang, C++11, libc++:3.4, 3.3
- GCC:4.8.1, 4.7.3, 4.6.3, 4.5.3, 4.4.7
- GCC, C++11:4.8.1
- GCC, C++98:4.8.1
- OS X
- GCC:4.2
- Apple Clang:5.0
- Apple Clang, C++11:5.0
- Windows
- GCC, mingw:4.8.0, 4.7.2, 4.6.3, 4.5.4, 4.4.7
- Visual C++:11.0, 10.0, 9.0
Boost 的其他测试编译器包括:
- OS X
- Apple Clang:5.0
- Apple Clang, C++11:5.0
- Clang:trunk
- Clang, C++11:trunk
- GCC:4.2.1
- Linux
- Clang:3.3, 3.2, 3.1, 3.0, trunk
- Clang, C++11:3.4
- Clang, C++11, libc++:3.4, 3.3
- GCC:4.9.0 (experimental), 4.8.1, 4.7.3, 4.6.4, 4.5.3, 4.4.7
- GCC, C++11:4.8.1
- GCC, C++98:4.8.1
- Intel:13.0.1, 12.1.6
- Windows
- GCC, mingw:4.8.0, 4.7.2, 4.6.3, 4.5.4, 4.4.7
- Visual C++:11.0, 10.0, 9.0
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此次发布。