Boost C++ 库

……世界上最受推崇和设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ 编码规范

版本 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 分配器时的一个bug。插入元素时,allocator_traits 检测到节点可以使用意外的隐式转换进行构造,这会导致若干问题。
  • Locale 补丁 - 修复了一个bug,该bug导致boost::locale::utf::utf_traits 接受一些无效的 UTF-8 序列,这是一个潜在的安全漏洞。

新增库

  • 算法: 来自 Marshall Clow 的一系列有用的泛型算法。这包括几种不同的搜索算法,以及 C++11 标准库中的大多数新算法
  • 函数/重载函数: 来自 Lorenzo Caminiti 的将不同函数重载到单个函数对象。
  • 局部函数: 来自 Lorenzo Caminiti 的在其他函数内、直接在其所需作用域内编程函数。
  • 实用工具/标识类型: 使用圆括号包装类型,以便它们始终可以作为宏参数传递,来自 Lorenzo Caminiti。

更新的库

  • 累加器:
    • 添加缺失的 #include <boost/throw_exception.hpp>,修复了 #6702
    • 针对 msvc 的变通方案,允许构造函数模板成为复制构造函数,修复了 #6535
    • 缩短文件名以符合 Boost 指南,修复了 #6196
  • 数组:
    • 添加对 Boost.Hash 的支持 #6791
  • Asio:
    • epoll_reactor 后端更改为对EPOLLOUT 事件进行延迟注册。
    • 修复了epoll_reactor 对带外数据的处理,该处理在上一个版本中由于不完整的修复而被破坏。
    • 更改 Asio 的 SSL 包装器以尊重 OpenSSL 的OPENSSL_NO_ENGINE 特性测试#define (#6432)。
    • 修复了windows::object_handle,使其能够与支持 C++11 移动语义的 Windows 编译器一起使用(例如g++).
    • 提高了链路重新调度的性能。
    • 添加了对g++4.7 的支持(在 C++11 模式下编译)(#6620)。
    • 修复了当io_service 使用 1 的concurrency_hint 构造时,signal_set 处理程序未被传递的问题 (#6657)。
  • 双向映射:
    • 删除对 Boost.Serialization 的多余依赖,修复了 #3868
    • 解决未使用的构造函数参数警告,修复了 #5749
    • 向映射视图添加 key_type 和 mapped_type(保留 data_type 以实现向后兼容性)typedefs,修复了 #6031
  • 时间单位:
    • 已修复的bug
      • #6361 在 Windows 32 位系统下 boost::chrono::process_real_cpu_clock::now() 中的整数溢出。
      • #6628 process_cpu_clocks.hpp 中的编译器警告。
      • #6666 thread_clock.hpp 需要 pthread.h。
  • 概念检查:
    • 已修复
      • #6738 变量隐藏警告。
  • 文件系统:
    • 从发行版中删除文件系统版本 2。版本 3 现在是唯一的发行版本。仍然使用 V2 的用户应尽快迁移到 V3。
    • 向 path 类添加 constexpr value_type preferred_separator。
    • 修复 #5118replace_extension 的工作方式与文档中指定的不同。文档、实现和测试用例都已应用修复程序。文档未能提及任何现有扩展名将被删除。简单情况下的行为已恢复到版本 2 的行为,但进行了更正,以便复杂的替换现在可以工作。已添加了来自 #5118 的两个测试用例。
    • 修复 #3737,Boost.Filesystem 无法在 Windows Mobile 上编译。在 Windows 上,不再包含<sys/stat.h>
    • 修复 #4065,Boost Filesystem 词法路径比较不一致。这需要多个源代码错误修复和代码清理,纠正与词法问题无关的问题。
    • 添加 path 类成员函数 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,通过添加MOVEFILE_COPY_ALLOWED 来处理跨驱动器、卷、文件系统的重命名,从而修复了 MS Windows 的filesystem::rename() 方法的错误实现。此修复对非 Windows 系统没有影响。
    • 修复 #6819,即使源不是空,一个源为一个字符数组的路径操作数也被视为空。这种数组可能出现在联合体或使用 C 变量长度数组习惯用法的代码中。
    • 修复 #6932,即使指定了error_code,create_directories 也会抛出异常。
  • 遍历:
    • 恢复对 #6131 的修复,该修复造成的损害大于好处。
  • 几何:
    • 已修复的bug
      • 整数点的可比较投影点策略的返回类型是错误的(整数),已修复
      • 已修复线段和多边形相交的几个鲁棒性问题
      • 过滤掉无效的相交输出
      • 多边形的不相交可能会错误地返回 true,已修复
    • 已解决的工单
      • 6585 针对备用语法多点的补丁,已应用
      • 6584 针对距离计算错误的补丁,已应用
      • 5730 与 6584 相同的问题,已修复
      • 6166 针对缺少转换的补丁,已应用
      • 6696 无效的相交输出,在报告之前(偶然地)已经在主干中修复了
    • 附加功能
      • 为 *polygon/*polygon 添加了算法“touches”(符合 OGC SF)
  • :
    • 已修复的bug
      • #4622 对具有自环的顶点进行 clear_vertex 操作可能会导致分段错误。
      • #6033 由 biconnected_components(...) 计算的低点映射有时是错误的。
      • #6242 同构不重置映射。
      • #6435 cube_topology 文档应说明是 3D,而不是 2D。
      • #6520 graph_parallel 文档中的 small_world_1_70_6_0p02.png 已损坏。
      • #6564 子图的 BGL 复制构造函数不跟踪局部顶点/边。
      • #6573 BGL:boost::isomorphism 例程在大型图中失败。
      • #6583 Dijkstra 访问者概念文档可能显示了变量的错误类型。
      • #6647 BGL 强连通分量无法在 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 与 const 子图一起使用。
      • #6858 boost::get() 调用被 g++ 错误地解析。
      • #6892 bron_kerbosch_all_cliques() 不需要 VertexIndexGraph 概念。
      • Trac 中未列出的其他错误和警告。
  • 哈希:
    • 支持std::arraystd::tuple(如果可用)(#6806)。
    • 避免 gcc 的-Wfloat-equal 警告 (#6771)。
    • 向长期弃用的boost/functional/detail/container_fwd.hpp 添加弃用警告。
  • 输入/输出流:
    • 改进的 gzip 支持 (#5908)。
    • 更新最新的 Boost.Filesystem 和 Boost.Test 的测试。
    • 修复一些文档错误 (#6530#6650)。
  • 迭代器:
    • 已修复
      • #5127 transform_iterator 中不正确的 result_of 使用
      • #5697 对于代理引用,iterator_facade::operator-> 已损坏
  • 多维数组:
    • 概念错误修复和 Visual Studio 2010 的解决方法 (#4874)
    • 对 assert.cpp 测试用例的修复 (补丁)
  • 词法转换:
    • boost::bad_lexical_cast 异常现在全局可见,即使代码使用 -fvisibility=hidden 编译也可以捕获。
    • 现在可以使用禁用了异常的编译器编译和使用库 #5800
    • boost::iterator_range<character_type*> 转换的性能更好,内存使用更少,并修复了一些错误。
    • 修复了bug和警告:#6645#6562#6812#6852#6717#6770#6504
  • 区域设置(Locale):
    • 修复了与STLPort库的构建问题
    • Boost.System现在是必需的依赖项
    • 修复了bug #6635#6833
  • 数学 (Math):
    • 将数学常量提升为一等公民,包括通过三个命名空间方便地访问最常用的内置浮点数float、double和long double。
    • 添加了由Benjamin Sobotta编写的Owen T函数和偏态正态分布。
    • 添加了汉克尔函数。
    • 根据K R Walker提交的补丁,修正了问题#6627 nonfinite_num_put格式化0.0不正确
    • 更改了常量初始化机制,使其即使对于用户自定义类型也是线程安全的,并且即使`long double`不是,用户自定义类型也能获得常量的完整精度。例如,即使`long double`可能只有64位或80位,128位有理数逼近也能与UDT一起工作并执行正确的操作。
    • 修复了`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
    • Bug修复:只有当初始状态定义为序列时,图构建才有效。
    • Bug修复:为终止或中断状态定义的标志不再中断这些状态的阻塞功能。
    • Bug修复:并非所有情况下,来自多个区域的多个延迟事件都能正常工作。
    • Bug修复:访问者按值传递给子状态机。
    • Bug修复:对于向自身发送事件的子状态机,未调用no_transition。
    • 修复了GCC的警告。
  • 程序选项 (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未内联'在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 duration 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 添加具有分配器的promise构造函数,遵循标准C++11。
      • #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:缺少互斥锁和释放函数。
      • #6672 upgrade_lock::缺少来自时间相关类型的构造函数。
      • #6675 upgrade_lock::缺少非成员交换。
      • 添加了缺失的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:pthreads_exit导致terminate()。
      • #5173 boost::this_thread::get_id非常慢。
      • #5351 中断future get抛出boost::unknown_exception。
      • #5516 如果存在另一个读锁,则在之前的升级锁释放时不会获取升级锁。
      • #5990 shared_future::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&&)的问题。
  • 无序容器 (Unordered):
    • 修复了`unordered_multiset`和`unordered_multimap`的相等性。
    • 实现了`reserve`(#6857)。
    • 避免了GCC的`-Wfloat-equal`和`-Wshadow`警告(#6190#6771)。
    • 修复了bcp的命名空间问题(#6905)。
    • 修复了Sun的变通方法(#6784)。
    • 对桶分配进行了一些内部更改。
    • 查看更改日志以了解完整详情。
  • Wave:
  • xpressive:
    • 用稍微不那么丑陋的方法替换非常丑陋的`lexical_cast` hack。
    • 用静态断言替换MPL断言,因为它在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
    • 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负责此次发布。