Boost C++ 库

...世界上最受尊敬和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

版本 1.49.0

版本 1.49.0

2012年2月24日 21:20 GMT

文档

下载
平台文件
Unixboost_1_49_0.tar.bz2
boost_1_49_0.tar.gz
Windowsboost_1_49_0.7z
boost_1_49_0.zip

补丁

  • 区域设置补丁 - 修复了一个导致 boost::locale::utf::utf_traits 接受一些无效 UTF-8 序列的错误,这是一个可能的安全漏洞。

新增库

  • Heap: 优先队列数据结构,来自 Tim Blechmann。

更新库

  • Asio:
    • 添加了一个新的类模板 basic_waitable_timer,它基于 C++11 时钟类型要求。它可以与 C++11 <chrono> 库工具中的时钟一起使用,或者,如果这些不可用,则可以使用 Boost.Chrono。可以使用 typedef high_resolution_timersteady_timersystem_timer 为标准时钟类型创建计时器对象。
    • 添加了一个新的 windows::object_handle 类,用于在 Windows 内核对象上执行等待。感谢 Boris Schaeling 为此功能的开发做出了重大贡献。
    • 在 Linux 上,connect() 在某些情况下可能会返回 EAGAIN。将其重新映射到另一个错误,使其看起来不像非阻塞操作(#6048)。
    • 修复了 NetBSD 上的编译错误(#6098)。
    • 修复了 Mac OS X 上的死锁问题(#6275)。
    • 修复了 buffered_write_stream 中的回归问题(#6310)。
    • 修复了 Windows 上在没有任务执行时重复运行 io_service 导致的非分页池“泄漏”问题(#6321)。
    • 恢复了之前的更改,允许在不持有锁的情况下执行一些推测性操作,因为它在某些多线程场景中引入了竞争条件。
    • 修复了如果第一个缓冲区为空,则两个缓冲区数组中的第二个缓冲区可能被忽略的错误。
  • Chrono:
    • 错误修复
      • #6092 来自非整数 duration 的输入导致编译器失败。
      • #6093 [1/3]秒作为有效的 duration 输入失败。
      • #6113 定义 BOOST_CHRONO_HEADER_ONLY 时出现重复符号。
      • #6243 Sandia-pgi-11.9:多个重载函数 "min" 的实例匹配。
      • #6257 Linux 上的 process_cpu_clock::now() 提供了 1/1000 倍的 time_points。
  • Container:
    • 修复了错误 #6499#6336#6335#6287#6205#4383
    • 通过内部 allocator_traits 克隆,为 C++11 和 C++03 编译器添加了 allocator_traits 支持。
  • Filesystem:
    • 修复 #3714,添加了测试用例并修复了赋值或追加使用自身或自身的一部分作为源时出现的类路径错误。
    • 修复 #4889#6320,Windows 上的区域设置 codecvt_facet 不是线程安全的。将 Windows、Mac OS X、区域设置和 codecvt facet 移回命名空间作用域。POSIX(OS X 除外)使用局部静态初始化(即延迟初始化)来确保如果环境变量配置错误,则可以捕获异常,并避免在实际未使用时使用 locale("")。
    • 修复 #5652,recursive_directory_iterator 在循环符号链接上失败。感谢 Daniel Aarno 提供的补丁。
    • 修复 #5653,recursive_directory_iterator(error_code) 仍然可以抛出 filesystem_error。
    • 修复 #5900,如果抛出错误,Windows 上的 directory_iterator 会出现访问冲突。感谢 Andreas Eckleder 提供的补丁。
    • 修复 #5900 评论 2,director_iterator 构造函数中使用 error_code 参数的错误导致在未传递 ec 参数的情况下调用了 increment。
    • 通过清理测试套件 path_test.cpp 代码修复 #5989,即使 ticket 本身没有缺陷,并澄清了文档;对路径的迭代会产生通用格式。
    • 修复 #5592,将 Windows codecvt 处理从 CP_THREAD_ACP 更改为 CP_ACP。
    • 针对 PGI 编译器的操作函数修复,感谢 Noel Belcourt。
    • 放宽权限测试以反映现实,尤其是在 Sandia 测试平台上。
  • Foreach:
  • Geometry:
    • 修复的错误
      • 多几何图形的距离忽略了指定的距离策略。
      • 多边形/多边形的差异(2011/10/24 在 GGL 列表中报告)。
      • 如果其中一个多几何图形为空,则在计算距离时引发异常
      • 多 DSV 未正确实用设置。
      • 有时可能会遗漏自相交(在 1.48 中引入)。
      • 凸包在空范围内崩溃(例如空多点)。
    • 已解决的 ticket
      • #6028 文档:闭包。
      • #6178 缺少头文件。
      • #6021 多点的凸包。
    • 附加功能
      • 支持线/多边形相交和差集
      • 支持转换不同点类型的线段/框
      • 支持为多点追加
      • 标量函数(距离、面积、长度、周长)现在在输入为空时抛出 empty_input_exception
    • 文档
      • 更新的支持状态
    • 内部更改
      • 更新了距离/转换/赋值/面积的 specializations/not_implemented
      • 将 wkt/dsv 移动到 io 文件夹,使域冗余
      • 将策略概念分配给零以避免 clang 警告(由 Vishnu 修补)
  • Graph:
    • 修复了错误 #5881#6033#6061#6137#6246#6239#6293#6306#6313#6371,以及 Trac 中未包含的其他错误。
    • 重新启用了 LEDA 图支持(感谢 Jens Muller 提供的补丁)。
    • 添加了 edge_predecessor_recorder 的文档。
  • Icl:
    • 修复了 ticket #6095#6210
    • 为构造函数、赋值运算符和二元运算符添加了移动语义。
  • Interprocess:
  • Intrusive:
  • Lexical cast:
  • Locale:
    • 修复了在检测无效输入序列时对 MultiByteToWideChar 的错误使用。
  • Move:
  • PropertyTree:
  • Proto:
    • 强制某些函数内联,修复了 #5735
    • 添加了针对每个域的 as_expras_child 的用户文档;其他文档调整。
    • 修复了一些错误且过于复杂的示例程序。
    • 添加了一些缺失的版权声明。
  • Spirit:
    • Spirit V2.5.2,有关详细信息,请参阅“新增功能”部分。
  • Thread:
    • 修复的错误
      • #2309 Boost.Thread 缺少 g++ 符号可见性支持。
      • #2639 应扩展文档(defer_lock、try_to_lock 等)。
      • #3639 Boost.Thread 无法在 Linux 上使用 Sun-5.9 构建。
      • #3762 无法使用 winscw(诺基亚的 Codewarrior)编译线程。
      • #3885 记录有关 boost.thread 和原生线程 api 混合使用的情况。
      • #3975 promise::set_wait_callback() 的前提条件不正确。
      • #4048 thread::id 格式化涉及区域设置
      • #4315 gcc 4.4 警告:内联...声明为 dllimport:属性被忽略。
      • #4480 OpenVMS 补丁,用于解决编译器问题。
      • #4819 boost.thread 的文档打印错误。
      • #5040 boost::thread 中的 future.hpp 无法使用 /clr 编译。
      • #5423 C++0x 的线程问题。
      • #5502 shared_mutex timed_lock 和 lock_shared 之间的竞争条件。
      • #5594 boost::shared_mutex 与 Windows CE 不完全兼容。
      • #5617 boost::thread::id 复制构造函数。
      • #5739 gcc-4.6 的 set-but-not-used 警告。
      • #5826 threads.cpp:线程创建失败时的资源泄漏。
      • #5839 thread.cpp:ThreadProxy 在出现异常时泄漏。
      • #5859 win32 shared_mutex 构造函数在出现异常时泄漏。
      • #6100 在 GLIBC 系统上使用 get_nprocs() 计算 hardware_concurrency()。
      • #6141 当 boost.thread 和 boost.move 一起使用时出现编译错误。
      • #6168 recursive_mutex 使用了错误的配置符号(可能是拼写错误)。
      • #6175 使用 SunStudio 编译时出错。
      • #6200 修复 condition_variable 和 mutex 错误,以便更好地处理 EINTR。
      • #6207 shared_lock swap 在 clang 3.0 c++11 上出现编译错误。
      • #6208 try_lock_wrapper swap 在 clang 3.0 c++11 上出现编译错误。
  • 无序:
    • 在没有右值引用的编译器上,容器默认不再可移动,因为移动模拟会导致一些奇怪的问题(#6167#6311)。定义 BOOST_UNORDERED_USE_MOVE 使它们可移动 - 无论如何,Boost.Move 仍然用于元素。
    • 修复序列点警告(#6370)。
    • 更好地支持使用旧标准库的 C++11 编译器。
  • Uuid:
    • 修复 #6258
    • 修复 #5325 (sha1 实现可以处理与规范一样长的消息)
    • #6118 的进展(警告更少了)
  • xpressive:
    • 消除 gcc 上的一些未使用的变量警告。

测试过的编译器

Boost 的主要测试编译器是

  • Linux
    • Intel: 11.1
    • LLVM Clang 2.8
    • GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.5.2, 4.6.2
    • GCC, C++0x 模式: 4.3.4, 4.4.3, 4.5.2
  • OS X
    • Intel: 11.1
    • GCC: 4.2.1, 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.2, 4.6.1, 4.6.2

Boost 的其他测试编译器包括

  • Linux
    • GCC: 4.2.4, 4.3.4, 4.4.4, 4.5.2, 4.6.2
    • GCC, C++0x 模式: 4.3.4, 4.4.4, 4.5.2
    • pgCC: 11.9
    • Intel: 10.1, 11.1, 12.0
    • PathScale: 4.0.8
    • 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, 9.0, 10.0
    • Visual C++ with STLport: 9.0
    • Visual C++,Windows Mobile 5, with STLport: 9.0
    • GCC, mingw: 4.4.0, 4.5.2
    • GCC, C++0x 模式, mingw: 4.5.2
    • GCC, mingw 64-bit: 4.4.7, 4.5.4, 4.6.1
  • AIX
    • IBM XL C/C++ Enterprise Edition, V11.1.0.0
  • FreeBSD
    • GCC 4.2.1,32 位和 64 位
  • Solaris
    • Sun 5.10

致谢

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