Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

版本 1.50.0

版本 1.50.0

2012年6月28日 12:48 GMT

文档

下载
平台文件
unixboost_1_50_0.tar.bz2
boost_1_50_0.tar.gz
windowsboost_1_50_0.7z
boost_1_50_0.zip

补丁

  • Boost.Unordered 补丁 - 修复了在使用 C++11 编译器但使用 C++03 分配器编译时的一个错误。当插入元素时,allocator_traits 检测到可以使用意外的隐式转换来构造节点,这会导致一些问题。
  • Locale 补丁 - 修复了一个错误,该错误导致 boost::locale::utf::utf_traits 接受一些无效的 UTF-8 序列,这是一个可能的安全漏洞。

新库

  • Algorithm: 来自 Marshall Clow 的有用的通用算法集合。这包括几种不同的搜索算法,以及 C++11 标准库中的大多数新算法
  • Functional/OverloadedFunction: 将不同的函数重载到单个函数对象中,来自 Lorenzo Caminiti。
  • LocalFunction: 在其他函数内部,直接在需要它们的作用域内本地编程函数,来自 Lorenzo Caminiti。
  • Utility/IdentityType: 将类型包装在圆括号内,以便它们始终可以作为宏参数传递,来自 Lorenzo Caminiti。

更新的库

  • Accumulators:
    • 添加缺失的 #include <boost/throw_exception.hpp>,修复了 #6702
    • 解决 msvc 允许 ctor 模板作为复制 ctor 的问题,修复了 #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)。
    • 修复了一个问题,当使用 concurrency_hint 为 1 (#6657) 构造 io_service 时,signal_set 处理程序未被传递。
  • Bimap:
    • 移除对 Boost.Serialization 的虚假依赖,修复了 #3868
    • 解决未使用的构造函数参数警告,修复了 #5749
    • 为映射视图添加 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:
    • 已修复
      • #6738 隐藏变量警告。
  • Filesystem:
    • 从发行版中删除 Filesystem Version 2。Version 3 现在是唯一发行的版本。仍然使用 V2 的用户应尽快迁移到 V3。
    • 向类路径添加 constexpr value_type preferred_separator。
    • 修复 #5118replace_extension 未按文档指定的方式工作。文档、实现和测试用例都已应用修复。文档未能提及任何现有扩展名都将被删除。简单情况下的行为已恢复为 Version 2 行为,但进行了更正,以便复杂的替换现在可以工作。#5118 中添加了两个测试用例。
    • 修复 #3737,Boost.Filesystem 无法在 Windows Mobile 上编译。在 Windows 上,不再包含 <sys/stat.h>
    • 修复 #4065,Boost Filesystem 字典路径比较不一致。这需要进行多个源代码错误修复和代码清理,纠正与字典顺序问题无关的问题。
    • 添加类路径成员函数 compare 以与 std::string 保持一致。
    • 收紧 filesystem/config.hpp 中的 BOOST_FILESYSTEM_DYN_LINKBOOST_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:
    • 恢复对 #6131 的修复,该修复弊大于利。
  • Geometry:
    • 修复的 Bug
      • 整数点的可比较投影点策略的返回类型错误(整数),已修复
      • 线段和多边形相交中的几个鲁棒性问题,已修复
      • 无效的相交输出被过滤掉
      • multi_polygon 的 disjoint 可能会错误地返回 true,已修复
    • 已解决的票证
      • 6585 替代语法 multipoint 的补丁,已应用
      • 6584 距离错误的补丁,已应用
      • 5730 与 6584 相同的问题,已修复
      • 6166 缺少转换的补丁,已应用
      • 6696 无效的相交输出,(偶然地)在报告之前已在 Trunk 中修复
    • 附加功能
      • 为 *polygon/*polygon 添加了算法 "touches" (OGC SF 兼容)
  • Graph:
    • 修复的 Bug
      • #4622 对具有自环的顶点执行 clear_vertex 可能会导致段错误。
      • #6033 biconnected_components(...) 计算的 Lowpoint 映射有时是错误的。
      • #6242 isomorphism 不会重置映射。
      • #6435 cube_topology 文档应说明 3D,而不是 2D。
      • #6520 graph_parallel 文档中的 small_world_1_70_6_0p02.png 已损坏。
      • #6564 subgraph 的 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 subgraph 一起使用。
      • #6858 boost::get() 被 g++ 错误地解析。
      • #6892 bron_kerbosch_all_cliques() 不需要 VertexIndexGraph 概念。
      • Trac 中未包含的其他错误和警告。
  • Hash:
    • 在可用时支持 std::arraystd::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*> 转换的错误修复
    • 修复的错误和警告:#6645, #6562, #6812, #6852, #6717, #6770, #6504
  • Locale:
    • 修复了 STLPort 库的构建问题
    • Boost.System 现在是必需的依赖项
    • 修复了错误 #6635, #6833
  • Math:
    • 提升了数学常量的地位,使其成为第一等公民,包括通过三个命名空间方便地访问最广泛使用的内置 float、double、long double。
    • 添加了 Benjamin Sobotta 编写的 Owen's T 函数和偏态正态分布。
    • 添加了 Hankel 函数。
    • 更正了问题 #6627 nonfinite_num_put 格式化 0.0 不正确,基于 K R Walker 提交的补丁。
    • 更改了常量初始化机制,使其即使对于用户定义的类型也是线程安全的,并且使用户定义的类型获得常量的完整精度,即使 long double 没有。因此,例如,128 位有理逼近将与 UDT 一起使用并执行正确的操作,即使 long double 可能只有 64 或 80 位。
    • 修复了 bessel_jy 中的问题,该问题导致 Y[sub 8.5](4[pi]) 产生 NaN。
  • MSM:
    • eUML:使用 eUML 定义为仅转换表的前端的更好语法。注意:重大更改!https://boost.ac.cn/doc/libs/1_50_0/libs/msm/doc/HTML/ch03s04.html#eUML-composite-table
    • Bugfix:仅当 initial_state 定义为序列时,图形构建才有效。
    • Bugfix:为 Terminate 或 Interrupt 状态定义的标志不再破坏这些状态的阻塞功能。
    • Bugfix:来自多个区域的多个延迟事件并非在所有情况下都有效。
    • Bugfix:访问者通过值传递给子机器。
    • Bugfix:对于向自身发送事件的子机器,未调用 no_transition。
    • 修复了 gcc 的警告。
  • Program Options:
  • PropertyMap:
    • 修复的 Bug
      • #6539 get() 的返回类型未正确记录。
      • #6721 property_map_traits 文档未提及引用。
  • Proto:
    • 当且仅当编译器实现 N3276 时,才使用基于 decltyperesult_of
    • 对于 C++11,强制参数为 mpl::eval_if_cmpl::if_cbool
    • 禁用'__forceinline 未内联'msvc 上的警告。
  • Ratio:
    • 修复的 Bug
      • #6498 boost::ratio 无法使用默认设置编译。
  • ScopeExit:
    • 新功能
      • 使用可变参数宏将捕获指定为逗号分隔的列表(但保留预处理器序列语法以实现向后兼容性)。
      • 使用 this_ 捕获作用域内的对象。
      • 使用 void 支持空捕获。
      • 在使用支持 C++11 lambda 函数的编译器上使用 BOOST_SCOPE_EXIT_ALL 的隐式 lambda 式捕获。
  • Thread:
    • 新功能
      • #1850 请求 unlock_guard 以补充 lock_guard。
      • #2637 请求 shared_mutex 持续时间 timed_lock 和 timed_lock_shared。
      • #2741 关于管理可移植和不可移植线程属性的提案。
      • #3567 请求 shared_lock_guard。
      • #6194 适应 Boost.Move。
      • #6195 c++11 合规性:使用 Boost.Chrono 提供标准时间相关接口。
      • #6217 遵循 Howard Hinnant 提案增强 Boost.Thread 共享互斥锁接口。
      • #6224 c++11 合规性:在支持它们的编译器上添加标准 noexcept 的使用。
      • #6226 c++11 合规性:从锁添加显式 bool 转换。
      • #6228 遵循标准 c++11 的带分配器的添加 promise 构造函数。
      • #6230 c++11 合规性:遵循 c++11 中定义的异常报告机制。
      • #6266 重大更改:如果可连接,线程析构函数应调用 terminate。
      • #6269 重大更改:如果可连接,线程移动赋值应调用 terminate。
      • #6272 c++11 合规性:添加 thread::id 哈希特化。
      • #6273 c++11 合规性:添加 cv_status 枚举类并在条件等待函数上使用它。
      • #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- Itanium 平台上的 Boost 1.36.0。
      • #4345 thread::id 和线程级联的连接问题。
      • #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 当存在另一个读锁时,不会获取升级锁(如果之前的升级锁释放)。
      • #5990 shared_future<T>::get() 具有错误的返回类型。
      • #6174 packaged_task 未正确处理移动结果。
      • #6222 使用 SunStudio 的编译错误:unique_future move。
      • #6673 shared_lock:移动赋值不适用于 c++11。
      • #6674 shared_mutex:try_lock_upgrade_until 不起作用。
      • 修复了在存在 task_object(task_object&&) 的情况下 ML 上使用 task_object(task_object const&) 发出的问题
  • Unordered:
    • 修复了 unordered_multisetunordered_multimap 的相等性。
    • 实现 reserve (#6857)。
    • 避免 gcc 的 -Wfloat-equal-Wshadow 警告 (#6190, #6771)。
    • 修复了 bcp 的命名空间问题 (#6905)。
    • 修复了 Sun 解决方法 (#6784)。
    • 对 bucket 分配进行了一些内部更改。
    • 有关完整详细信息,请参阅更改日志
  • Wave:
    • Wave V2.3.2,有关详细信息,请参阅变更日志
  • xpressive:
    • 用稍微不那么丑陋的 hack 删除了非常丑陋的 lexical_cast hack。
    • 由于 MPL 断言在 C++11 中存在问题,因此用静态断言替换 MPL 断言,修复了 #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
    • GCC 4.2.1, 32 位和 64 位
  • QNX
    • QCC,C++0x 模式: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0

Boost 的其他测试编译器包括

  • Linux
    • 来自 subversion 的 Clang
    • 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
    • 来自 subversion 的 Clang
    • Intel 11.1, 12.0
    • GCC: 4.4.4
    • GCC,C++0x 模式: 4.4.4
  • Windows
    • Visual C++ 8.0, 10.0
    • 带有 STLport 的 Visual C++: 9.0
    • 带有 STLport 的 Visual C++, Windows Mobile 5: 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
    • GCC 4.2.1, 32 位和 64 位
  • Solaris
    • Sun 5.10

致谢

Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此版本。