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

补丁

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

新库

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

更新的库

  • Asio:
    • 添加了一个新的类模板 basic_waitable_timer,它基于 C++11 时钟类型要求。它可以与来自 C++11 <chrono> 库设施的时钟一起使用,或者在这些不可用时,与 Boost.Chrono 一起使用。typedefs 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:
    • Bug 修复
      • #6092 来自非整数持续时间的输入导致编译器失败。
      • #6093 [1/3]秒作为有效的持续时间输入失败。
      • #6113 当定义了 BOOST_CHRONO_HEADER_ONLY 时出现重复符号。
      • #6243 Sandia-pgi-11.9:多个重载函数 "min" 匹配。
      • #6257 linux 上的 process_cpu_clock::now() 给出 1/1000 倍的时间点。
  • Container:
    • 修复了错误 #6499, #6336, #6335, #6287, #6205, #4383
    • 通过内部 allocator_traits 克隆,为 C++11 和 C++03 编译器添加了 allocator_traits 支持。
  • Filesystem:
    • 修复 #3714,当赋值或追加使用自身或自身的一部分作为源时,添加了类路径错误的测试用例和修复。
    • 修复 #4889, #6320, Locale codecvt_facet 在 Windows 上不是线程安全的。将 Windows、Mac OS X、locale 和 codecvt facet 移回命名空间作用域。除 OS X 之外的 POSIX 使用本地静态初始化(即惰性初始化)来确保在环境变量配置错误时异常可捕获,并避免在实际未使用时使用 locale("")。
    • 修复 #5652,recursive_directory_iterator 在循环符号链接上失败。感谢 Daniel Aarno 的补丁。
    • 修复 #5653,recursive_directory_iterator(error_code) 仍然可以抛出 filesystem_error。
    • 修复 #5900,如果抛出错误,directory_iterator 在 Windows 上访问冲突。感谢 Andreas Eckleder 的补丁。
    • 修复 #5900 注释 2,director_iterator 构造函数中带有 error_code 参数的错误,该错误导致在未传递 ec 参数的情况下调用 increment。
    • 修复 #5989,清理测试套件 path_test.cpp 代码,即使该 ticket 本身不是缺陷,并澄清文档;迭代路径产生通用格式。
    • 修复 #5592,将 Windows codecvt 处理从 CP_THREAD_ACP 更改为 CP_ACP。
    • PGI 编译器的操作函数修复,感谢 Noel Belcourt。
    • 放宽权限测试以反映现实,尤其是在 Sandia 测试平台上。
  • Foreach:
  • Geometry:
    • 修复了错误
      • 多几何图形的距离忽略了指定的距离策略。
      • 在 polygon/multi_polygon 的差集中 (2011/10/24 在 GGL 列表中报告)。
      • 为计算多几何图形的距离引发异常,其中一个是空的
      • Multi DSV 未正确使用设置。
      • 自相交有时可能会被遗漏(在 1.48 中引入)。
      • 凸包在空范围上崩溃(例如,空多点)。
    • 已解决的 tickets
      • #6028 文档:closure。
      • #6178 缺少头文件。
      • #6021 多点的凸包。
    • 附加功能
      • 支持线/多边形交集和差集
      • 支持不同点类型的线段/框的转换
      • 支持多点的追加
      • 标量函数(距离、面积、长度、周长)现在在空输入时抛出 empty_input_exception
    • 文档
      • 更新的支持状态
    • 内部更改
      • 距离/转换/赋值/面积的特化/未实现更新
      • 将 wkt/dsv 移动到 io 文件夹,使域变得冗余
      • 策略概念分配为零以避免 clang 警告 (由 Vishnu 修复)
  • Graph:
  • Icl:
    • 修复了 tickets #6095#6210
    • 为构造函数、赋值运算符和二元运算符添加了移动语义。
  • Interprocess:
  • Intrusive:
  • Lexical cast:
  • Locale:
    • 修复了在检测无效输入序列时错误使用 MultiByteToWideChar 的问题。
  • Move:
  • PropertyTree:
  • Proto:
    • 强制某些函数为内联函数,修复了 #5735
    • 为每个域的 as_expras_child 添加了用户文档;其他文档调整。
    • 修复了一些有缺陷且过于复杂的示例程序。
    • 添加了一些缺失的版权声明。
  • Spirit:
    • Spirit V2.5.2,有关详细信息,请参阅“新增功能”部分。
  • Thread:
    • 修复的 Bug
      • #2309 Boost.Thread 中缺少 g++ 符号可见性支持。
      • #2639 应该扩展文档 (defer_lock, try_to_lock, ...)。
      • #3639 Boost.Thread 无法在 Linux 上的 Sun-5.9 上构建。
      • #3762 Thread 无法使用 winscw (Nokia 的 Codewarrior) 编译。
      • #3885 关于 boost.thread 和本机线程 api 混合使用的文档。
      • #3975 promise::set_wait_callback() 的不正确前提条件。
      • #4048 thread::id 格式化涉及 locale
      • #4315 gcc 4.4 警告:inline ... 声明为 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 上出现编译器错误。
  • Unordered:
    • 在没有右值引用的编译器上,容器默认不再可移动,因为移动模拟导致了一些奇怪的怪癖 (#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
    • Clang from subversion
    • 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 管理了此版本。