Boost C++ 库

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

版本 1.52.0

版本 1.52.0

2012年11月5日 16:05 格林尼治标准时间

文档

下载
平台文件
unixboost_1_52_0.tar.bz2
boost_1_52_0.tar.gz
windowsboost_1_52_0.7z
boost_1_52_0.zip

补丁

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

更新的库

  • 累加器:
    • 修复长期存在的依赖项跟踪错误,#7409
  • 配置:
    • 为 gcc-4.4 定义BOOST_NO_SFINAE_EXPR,因为发现其支持存在太多错误。
  • Chrono:
    • 新功能
      • #5980 使用 H. Hinnant 的提案 提案 增强 Chrono I/O,其优点是可以为使用格里高利历的系统时钟提供 I/O。
      • #5981 为持续时间和时间点的格式化状态添加 I/O 状态保存器。
      • #7059 添加低级 I/O 功能。
    • 已弃用的功能
      • Boost.Chrono 1.2.x 中包含的 Chrono I/O 版本已在 2.0.0 版本中完全重构。
      • Chrono I/O:操纵器__duration_short__duration_long 已弃用。应使用参数化形式__duration_fmt或重命名的操纵器__duration_symbol__duration_prefix代替。
      • Chrono I/O:__duration_punct<>构面已弃用。应使用__get_duration_style自由函数获取信息,并使用__duration_units构面进行本地化。
      • BOOST_CHRONO_VERSION==2时,上述已弃用的函数不可用。
    • 修复
      • #7381 C++11 兼容性:将 constexpr 持续时间赋值给非常量局部变量时出现未解析的符号。
      • #7479 如果标准库未提供 constexpr 接口,则支持 constexpr 的编译器编译失败。
    • 不会修复
      • #6871 chrono_io.hpp:operator<<(ostream& os, ...)修改 os 的状态。2.0 版本中提供的新 I/O 接口解决了这个问题。您应该迁移到新版本。
  • 容器:
    • 改进了stable_vector的模板代码膨胀和类型安全。
    • 更改了类型定义并重新排序了序列容器的函数,以改进 Doxygen 文档。
    • 修复了错误 #6615#7139#7215#7232#7269#7439
    • 实现了 LWG 问题 #149(范围插入现在返回迭代器)并清理了大多数容器中的插入代码。
    • 更正了别名错误。
  • DateTime:
    • 文档化BOOST_DATE_TIME_NO_LIB (#6077)。
    • 修复nth_as_str (#7022)。
    • 修复了一些警告 (#7234)。
  • Foreach:
    • 修复 gcc 上的对齐警告。
  • 函数:
    • 添加了移动构造函数和移动赋值运算符(仅适用于支持 C++11 右值引用的编译器)#7330
  • :
  • 哈希:
    • 恢复enum支持,该支持在上一个版本中意外删除 (#7437)。
    • 新的浮点数哈希器 - 将在更多平台上哈希二进制表示,这应该更快。
  • 进程间通信:
    • mapped_region中添加了shrink_byadvise函数。
    • ABI 破坏性更改:使用循环缓冲区索引重新实现了message_queue(旧行为使用有序数组,导致过度复制)。这应该会大大提高性能,但会破坏 ABI。可以通过在boost/interprocess/detail/workaround.hpp中未定义宏BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX来使用旧的行为/ABI。
    • 改进了message_queue插入时间,避免了常见情况下的优先级搜索(数组和循环缓冲区配置)。
    • 实现了interproces_sharable_mutexinterproces_condition_any
    • 改进了offset_ptr性能。
    • 添加了整数溢出检查。
  • 迭代器:
    • 已修复
      • #5825 在不使用项的情况下构造 function_input_iterator
      • #7194 make_function_input_iterator 文档中的错误
    • 重大更改
      • 由于对 #5825 的修复,function_input_iterator 将不再对包装的空元函数进行不必要的调用。例如,构造结束迭代器现在不会触发调用;并且对迭代器进行 N 次解引用和递增将触发 N 次调用,而不是像以前那样触发 N+1 次调用。依赖于旧行为的用户代码需要进行调整。
  • 词法转换:
    • 恢复了在 MSVC-2003 上的编译(在 1.51.0 中已损坏)#7255
    • 添加了lexical_cast(const CharType* chars, std::size_t count)函数重载。#6663
    • 修复了错误 #7228
  • 数学:
    • 添加了艾里函数和雅可比椭圆函数。
    • 在几个分布中(特别是学生 t 分布),更正了小自由度下的矩 #7177(由 Thomas Mang 报告)。
    • 通过添加一个函数check_out_of_range来测试许多可能的错误参数,从而更正了在许多分布中未能检测到错误参数的问题 #6934(由 Florian Schoppmann 报告)。此测试揭示了几个分布中对错误参数的检查无效,这些检查现已得到纠正。
    • 修复了汉克尔函数中的问题,该问题导致对于 *x < 0* 和 *ν* 为奇数时返回不正确的值,请参见 #7135
    • 在非中心 t 分布中允许无限自由度 #7259,使用正态分布实现(由 Thomas Mang 提出)。还通过在 delta / (4 * v) < epsilon 时(对于使用的浮点类型),切换为使用以 delta 为中心的 Student t 分布(或无限自由度的正态分布),大大提高了大自由度和/或大非中心参数的精度。请参见 #7259。还发现,当自由度非常大时,不完全贝塔函数会遭受严重的抵消误差。(这在我们目前的代码中已得到修复,但任何基于 Didonato 和 Morris 原论文的代码(实际上可能是现有的每个实现)都会遇到同样的问题)。
    • 修复了次要问题 #6517#6362#7053#2693#6937#7099
  • Phoenix:
    • 使 Phoenix 能够与基于decltypeboost::result_of一起使用。
  • 多边形:
    • 包含了 Voronoi 图扩展。
    • 引入了新的线段概念。
    • 修复了编译问题。
  • Proto:
    • 原始转换的数据参数现在可以选择具有按键索引的槽。
    • 原始转换现在可以对非 const 限定的临时表达式进行操作。
    • <iterator>中的自由函数以及一些 Boost.Range 函数添加可调用函数对象类型。
    • Boost.MPL 算法可用于 Proto 表达式节点。
    • proto::pass_through原始转换现在接受可选的Domain模板参数,用于指定结果表达式的目标域。
  • Ratio:
    • 功能
      • 分别用符号和前缀函数替换short_namelong_name函数。
    • 已弃用
      • ratio_string<>::short_nameratio_string<>::long_name 已弃用。请分别使用 ratio_string<>::symbolratio_string<>::prefix。这些函数将在 1.55 版本中移除。
    • 修复
      • #7478 如果库没有提供 std::u16string 和 std::u32string,则在支持 char16_t 和 char32_t 的编译器上编译失败。
  • Result_of:
    • 对于支持度被认为“足够好”的编译器,将 boost::result_of 切换为使用 decltype。这意味着如果编译器实现了 n3276。(目前,这仅包括最新版本的 clang。)
    • boost::result_of 使用 decltype 时,现在是“SFINAE 友好”的。参见 n3436
  • 线程:
    • 已弃用的功能:自 Boost 1.50 以来已弃用的功能,仅在 Boost 1.55 之前可用。这些已弃用的功能将在 Boost 1.52 之前默认提供。如果您不想包含已弃用的功能,您可以定义 BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0。从 1.53 版本开始,这些功能将不再默认包含。从该版本开始,如果您仍然想包含已弃用的功能,您可以定义 BOOST_THREAD_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0。这些已弃用的功能仅在 Boost 1.55 之前可用,也就是说您还有一年的时间迁移到新功能。
      • 不使用 Boost.Chrono 库的时间相关函数,请改用 chrono 重载。
    • BOOST_THREAD_VERSION==3(自 Boost 1.53 起的默认值)时的重大更改:有一些新功能共享相同的接口,但行为不同。当 BOOST_THREAD_VERSION 为 3 时,这些重大更改的功能将默认提供,但是用户可以选择版本 2 的行为,方法是定义相应的宏。至于已弃用的功能,这些已破坏的功能仅在 Boost 1.55 之前可用。
      • #6229 C++11 兼容性与重大更改:根据 C++11 标准,将 unique_future 重命名为 future。
      • #6266 C++11 兼容性与重大更改:如果线程可连接,则线程析构函数应调用 terminate。
      • #6269 C++11 兼容性与重大更改:如果线程可连接,则线程移动赋值应调用 terminate。
    • 新功能
      • #4710 C++11 兼容性:缺少 async()
      • #7283 C++11 兼容性:添加 notify_all_at_thread_exit
      • #7345 C++11 兼容性:向递归互斥体 try_lock 添加 noexcept
    • 已修复的错误
      • #2361 thread_specific_ptr:记录密钥的性质、复杂性和基本原理。
      • #2797 thread_specific_ptr 的两个问题。
      • #5274 使用 msvc8.1 下的 stlport 5.1.5 无法编译 future.hpp,因为类未定义。
      • #5431 Windows CE 6.0 (互锁)中的编译错误。
      • #5752 boost::call_once() 在某些平台上不可靠。
      • #7045 线程库不会自动编译 date_time。
      • #7173 函数名错误 interrupt_point()
      • #7200 无法构建模块化的 boost.thread。
      • #7220 gcc 4.6.2 警告内联 + dllimport 函数。
      • #7238 this_thread::sleep_for() 不响应 interrupt()。
      • #7245 与版本 3 相关的文档中存在轻微的错别字。
      • #7272 win32/thread_primitives.hpp:(不必要的)警告。
      • #7284 说明在共享互斥体上锁和共享锁之间没有访问优先级。
      • #7329 boost/thread/future.hpp 在 HPUX 上无法编译。
      • #7336 BOOST_THREAD_DONT_USE_SYSTEM 不起作用。
      • #7349 packaged_task 保持对临时对象的引用。
      • #7350 allocator_destructor 不会销毁对象。
  • uBLAS:
    • 改进了 inplace_solve 的性能(问题 #4024)。
    • 修复了与 gcc 4.7 一起使用的 coordinate_matrix(问题 #7363)。
  • 无序:
    • 在赋值中,尽可能重用现有节点。
    • 修复了删除范围时的错误(#7471)。
    • 对实现进行了一些工作。
  • Uuid:
    • 修复了 #6118#6788#7375
    • #7128 - 修复了 sha1.hpp 中对于长度超过 536,870,912 字节的消息的错误。
  • Wave:
  • xpressive:
    • 使 sub_match 可与 Boost.Range 一起使用。修复了 #7237

已测试的编译器

Boost 的主要测试编译器是:

  • Linux
    • GCC:4.2.4、4.3.4、4.4.3、4.5.3、4.6.2、4.7.2
    • GCC,C++11 模式:4.3.4、4.4.3、4.5.3、4.6.2
    • Intel:11.1、12.0、12.1
    • LLVM Clang:2.8
  • OS X
    • GCC:4.4.4
    • GCC,C++11 模式:4.4.4
    • Intel:11.1、12.0
  • Windows
    • GCC,mingw:4.4.0、4.4.7、4.5.4、4.6.3、4.7.0
    • Visual C++:8.0、9.0、10.0
  • FreeBSD
    • GCC:4.2.1,32 位和 64 位

Boost 的其他测试编译器包括:

  • Linux
    • Cray:8.0
    • Clang:来自 Subversion
    • GCC:4.2.4、4.3.4、4.4.4、4.5.3、4.6.2、4.6.3、4.7.0、4.7.1、4.7.2
    • GCC,C++11 模式:4.3.4、4.4.4、4.5.3、4.6.3、4.7.1
    • pgCC:11.9
    • Intel:10.1、11.1、12.0、12.1
    • Visual Age:10.1
  • OS X
    • Clang:来自 Subversion
    • Clang,C++11 模式:来自 Subversion
    • Intel:11.1、12.0
    • GCC:4.4.4
    • GCC,C++11 模式:4.4.4
  • Windows
    • Visual C++:8.0、9.0、10.0、11.0
    • 使用 STLport 的 Visual C++:9.0
    • 使用 STLport 的 Visual C++,Windows Mobile 5:9.0
    • GCC,mingw:4.4.0、4.4.7、4.5.4、4.6.3、4.7.0
  • AIX
    • IBM XL C/C++ Enterprise Edition:V12.1.0.0
  • FreeBSD
    • GCC:4.2.1,64 位
  • Solaris
    • Sun:5.10

鸣谢

Beman Dawes、Eric Niebler、Rene Rivera、Daniel James、Vladimir Prus 和 Marshall Clow 负责此版本的管理。