Boost C++ 库

...世界上最受推崇和设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

版本 1.55.0

版本 1.55.0

2013年11月11日 19:50 GMT

文档

下载
平台文件
unixboost_1_55_0.tar.bz2
boost_1_55_0.tar.gz
windowsboost_1_55_0.7z
boost_1_55_0.zip

其他下载

新闻

Config 库已移除对一些非常旧版本的编译器的支持。新的最低要求是

  • Digitial Mars 8.41
  • GCC 3.3
  • Intel 6.0
  • Visual C++ 7.1

注意:这只是 Config 的最低要求。某些 Boost 库可能有更高的最低要求,并且可能不支持所有平台或编译器。

其他编译器目前保持不变,但我们正在考虑移除对其他一些旧编译器的支持。 候选移除的编译器是

  • Metroworks C++ (即 codewarrior)
  • SunPro 5.7 及更早版本
  • Borland C++ Builder 2006 (5.82) 及更早版本

如果您正在使用这些编译器中的任何一个,请在邮件列表中告知我们。我们将在做出决定之前考虑收到的任何反馈。

Visual Studio 2013/Visual C++ 12 的已知错误

Visual Studio 2013 在发布过程的后期才发布,因此存在一些未解决的问题。这些问题包括

  • 由于缺少 include,无法编译序列化。
  • 使用 Boost.Container 的 allocator_traits 中的 has_member_function_callable_with 会导致编译错误 (#9332)。
  • 在诸如 Unordered 和 MultiIndex 之类的库中,使用初始化列表调用重载函数可能会导致编译错误,Visual C++ 声称重载不明确。这是一个 Visual C++ 的 bug,目前尚不清楚是否有好的解决方法。这不会影响不使用初始化列表的代码,或使用不需要隐式转换的初始化列表(即,容器的精确值类型的初始化列表)。
  • 线程: ex_scoped_thread 编译失败 (#9333)。

补丁

  1. 日志补丁:修复了在支持 AVX2 的 CPU(例如 Intel Haswell)上使用 dump 操作符时输出不正确的问题。

新库

  • Predef: 此库从 Rene Rivera 获取,定义了一组编译器、架构、操作系统、库和其他版本号,这些版本号来自 C、C++、Objective C 和 Objective C++ 预定义宏或在通常可用的头文件中定义的宏中收集的信息。

更新的库

  • Accumulators:
    • #7915 修复了愚蠢的拼写错误。
    • #8850 修复了 MSVC 警告。
    • #8262average 重命名为 fdiv
  • Any:
    • boost::bad_any_cast 异常现在在模块之间可见 #8751
    • 添加了 clear() 成员函数。
    • 添加了缺少的 BOOST_NOEXCEPT
    • 修复了 const 右值的问题 #9215
  • Asio:
    • 实现了对 Windows Runtime 的有限移植。此支持要求启用语言扩展。由于 Windows Runtime API 公开的功能受限,因此此移植还存在以下注意事项
      • 诸如 io_servicestrand、缓冲区、组合操作、定时器等核心功能应全部正常工作。
      • 对于套接字,仅支持客户端 TCP。
      • 不支持显式绑定客户端 TCP 套接字。
      • 套接字不支持 cancel() 函数。只能通过关闭套接字来取消异步操作。
      • 不支持使用 null_buffers 的操作。
      • 仅支持 tcp::no_delaysocket_base::keep_alive 选项。
      • 解析器不支持服务名称,仅支持数字。也就是说,您必须使用“80”而不是“http”。
      • 大多数解析器查询标志均无效。
    • 修复了一个回归(在 Boost 1.54 中引入),在某些平台上,来自 async_connect 的错误没有正确传播到完成处理程序 (#8795)。
    • 修复了 Windows 特有的回归(在 Boost 1.54 中引入),当多个线程正在运行 io_service 时会发生。发生此错误时,异步操作的结果(错误和传输的字节数)会被错误地丢弃,并改用零值。对于 TCP 套接字,这会导致虚假的 end-of-file 通知 (#8933)。
    • 修复了处理程序跟踪中的一个 bug,该 bug 没有正确打印某些处理程序 ID (#8808)。
    • 修复了用于测试成功同步接受操作的比较,以便它可以与无符号套接字描述符正常工作 (#8752)。
    • 确保在已经引发的信号上启动 async_wait 时,信号编号会正确传递给完成处理程序 (#8738)。
    • 禁止了 g++ 4.8+ 关于未使用 typedef 的警告 (#8980)。
    • 为使用默认调用钩子的处理程序启用了移动优化 (#8624)。
    • 澄清了程序不得发出重叠的 async_write_at 操作 (#8669)。
    • 更改了 Windows HANDLE 后端,以将 ERROR_MORE_DATA 视为非致命错误,当 GetOverlappedResult 为同步读取返回该错误时 (#8722)。
    • Visual C++ 语言扩展使用 generic 作为关键字。添加了一个解决方法,当这些语言扩展生效时,会将命名空间重命名为 cpp_generic
    • 修复了一些在 Boost 1.54 中没有获得 async_result 支持的异步操作。特别是,已更新缓冲流模板,使其符合当前处理程序模式 (#9000, #9001)。
    • 为 Microsoft Visual Studio 2012 启用了移动支持 (#8959)。
    • 为 Microsoft Visual Studio 2012 添加了 use_future 支持。
    • 移除了 Windows IOCP 后端中对 std::min 的使用,以避免依赖于 <algorithm> 头文件 (#8758)。
    • 消除了一些不必要的处理程序副本。
    • 修复了代码和文档中的各种次要和修饰性问题(包括 #8347, #8950, #8953, #8965, #8997)。
  • Atomic:
    • 为 GCC、MSVC 和兼容编译器上的 x86 目标添加了对 64 位原子操作的支持。当在编译时已知目标 CPU 支持所需指令时,将启用此支持。
    • 为 GCC 和兼容编译器上的 x86-64 目标添加了对 128 位原子操作的支持。当在编译时已知目标 CPU 支持所需指令时,将启用此支持。可以使用新的 BOOST_ATOMIC_INT128_LOCK_FREE 宏来测试此支持。
    • 添加了基于 GCC __atomic* 内置函数的 atomic<> 的更高效实现,该内置函数自 GCC 4.7 起可用。
    • 添加了对更多 ARM v7 CPU 的支持,改进了对 Thumb 2 的检测。
    • 在 GCC 和兼容编译器上添加了对 x32(即具有 32 位指针的 64 位 x86)目标的支持。
    • 移除了对 Boost.Thread 的依赖。
    • 内部锁池现在包括适当的填充和对齐,以避免虚假共享。
    • 修复了在 Windows 上使用 Intel 编译器进行编译的问题。移除了在 Windows 上编译时内部宏的重复。
    • 当可用时,一些代码重构以使用 C++11 功能。
  • Chrono:
    • 修复的错误
      • #7868 chrono_io 错误地解析时间 (1.53 和 1.52)
      • #9028 boost/chrono/stopwatches/formatters/base_formatter.hpp 中的错别字
      • #9147 未初始化的 std::tm
  • 循环缓冲区:
    • 添加了对右值引用和使用 Boost.Move 的右值引用模拟的支持。仅当值类型具有 noexcept 移动构造函数和 noexcept 移动赋值运算符时才会移动值 #7888。现在,循环缓冲区可用于仅移动类型。
    • 更好的文档。
    • #5362 circular_buffer 在使用 BOOST_NO_EXCEPTIONS 时无法编译。
    • #7025 circular buffer 在编译时报告警告:“函数返回类型忽略类型限定符”。
    • #7950 消除 VS2005 下的 W4 警告 - 警告 C4913:存在用户定义的二元运算符“,”,但没有重载可以转换所有操作数,使用默认的内置二元运算符“,”。
  • 配置:
    • 重大更改: 移除对一些较旧编译器的支持。新的最低编译器版本为
      • Digitial Mars 8.41
      • GCC 3.3
      • Intel 6.0
      • Visual C++ 7.1
      其他编译器保持不变。
  • 容器:
  • 上下文:
    • #8650 SSE2 内联函数
  • 协程:
    • 新的接口(单向数据传输)。
    • #8782 没有最佳替代方案
    • #8801 自动链接
  • 文件系统:
    • 修复了 Android 编译问题 #8706
  • Fusion:
    • #8759map_tag 特化 convert_impl
  • 几何:
    • 附加功能
      • 为线段类型添加了质心
      • 为线段-盒子和线串-盒子添加了 intersects() 和 disjoints()
      • 添加了使用打包算法创建 rtree
      • 添加了 contains() 和 covers() 空间查询谓词
      • 添加了迭代查询
    • 缺陷修复
      • 在某些情况下调用了 .back() 或 .clear(),违反了 Concepts 的用法。修复了报告的案例
    • 解决的工单
      • 6958 相交生成自相交。由尖峰引起,已修复
      • 8364 无效输入异常,由先前步骤中的尖峰引起,已修复
      • 8365 无效输入异常,由先前步骤中的尖峰引起,已修复
      • 8969 boost::geometry::model::point 的单参数构造函数应为显式
      • 8825 为 doxygen_xml2qbk 添加成员变量文档的补丁
      • 8652 三角形-三角形相交失败。由尖峰引起,已修复
      • 9047 包含自身的 Boost 文件(strategies/intersection.hpp),已修复
  • :
    • 不再允许 void 作为捆绑的属性类型(例如,在图类型的 VertexProperties 模板参数中);它之前不能可靠地工作,但现在静态断言完全禁止它。请改用 boost::no_property
    • 在深度优先搜索中添加了对 finish_edge 访问者事件点的支持;此更改应向后兼容没有该成员函数的访问者。
    • 禁用在 Sun 编译器上构建测试。
    • breadth_first_visitbreadth_first_searchdijkstra_shortest_pathsdijkstra_shortest_paths_no_init 的非命名参数版本中支持多个源顶点。此功能尚未记录;要使用它,请将这些函数中每个函数的单个源顶点参数替换为包含要使用的源顶点的相同类型的两个输入迭代器。
    • 添加了 Hawick 电路算法;由 Louis Dionne 贡献。
    • 添加了边着色算法;由 Maciej Piechotka 贡献。
    • 添加了最小成本最大流算法;由 Piotr Wygocki 贡献。
    • 修复了 Trac 中的错误和功能请求:#5269, #8317, #8433, #8791, #8877, #8986, #9012, #9080
  • 哈希:
    • 简化了 SFINAE 检查,以便它有望在 Sun 5.9 上工作 (#8822)。
    • 抑制 Visual C++ 无限循环警告 (#8568)。
  • 进程间:
  • 侵入式:
    • 源码破坏性:已弃用 splay 容器中的 xxx_dont_splay 函数。已弃用 splay 容器中的 splay_set_hook,请改用 bs_set_hook。两者将在 Boost 1.56 中删除。
    • ABI 破坏性:哈希容器的末尾迭代器被实现为指向桶数组末尾的下一个位置(请参阅 #8698),这导致在要插入的值被分配在桶数组旁边时出现严重错误。末尾迭代器实现已更改为指向桶数组的开头。
    • 为了减少模板和调试符号膨胀,进行了大规模重构。在调试模式下,MSVC 编译器中的测试对象文件已减少到一半。没有相同 COMDAT 折叠 (ICF) 的工具链应该会注意到大小的改进。
    • 实现了 SCARY 迭代器
  • 词法转换:
    • std::bad_alloc 异常现在不会转换为 boost::bad_lexical_cast #8966
    • 添加了静态断言,如果转换需要,则检查 std::numeric_limits 特化。使用 BOOST_HAS_INT128 检测 128 位整数支持 #8790
    • 改进了文档,并添加了更多用法示例。
  • 日志:
    • 一般更改
      • 添加了一个新的配置宏 BOOST_LOG_WITHOUT_DEFAULT_FACTORIES。通过定义此宏,用户可以禁用设置解析器使用的默认过滤器和格式化程序工厂的编译。这可以显着减小二进制大小,同时仍保留对设置解析器的支持。
      • 重写了一些解析器,以减少编译的二进制大小。重写的解析器在检测模糊和不正确的输入方面更加健壮。
      • 以下头文件已弃用:boost/log/utility/intrusive_ref_counter.hppboost/log/utility/explicit_operator_bool.hppboost/log/utility/empty_deleter.hpp。这些头文件将在未来的版本中删除。这些头文件的内容已移至其他库。
    • 缺陷修复
      • 修复了当使用 QueryPerformanceCounter API 时,timer 属性在 Windows 上线程争用严重时生成不正确的时间读数的问题。
      • 修复了阻止将解析的过滤器与某些属性一起使用的过滤器解析器中的错误。
      • 修复了默认 sink 和格式化程序之间的线程 ID 格式差异。
      • 关闭的工单:#8815, #8819, #8915, #8917, #9139, #9140, #9153, #9155
    • 有关更多详细信息,请参阅 更新日志
  • 数学:
    • 抑制大量警告(主要来自 GCC-4.8 和 MSVC) #8384, #8855, #9107, #9109
    • 修复了 PGI 编译问题 #8333
    • 修复了 PGI 常数值初始化问题,该问题导致 erf 生成不正确的结果 #8621
    • 防止宏扩展一些也是 C++ 函数的 C99 宏 #8732#8733
    • 修复了 Student's T 分布在自由度很大(大于最大可表示整数)时的行为不正确的问题 #8837
    • 即使平台没有标准的 long double 支持,也可以使一些核心函数与 long double 一起使用 #8940
    • 修复了分布的错误处理,以在随机变量为无穷大时捕获无效的比例和位置参数 #9042#9126
    • 为 Intel C++ 14 中损坏的 <tuple> 添加了解决方法 #9087
    • 改进了椭圆积分中参数缩减的一致性 #9104
    • 修复了逆不完全贝塔函数中的错误,当贝塔函数实际上是反正弦函数或 Student's T 分布时会导致抵消错误。
    • 修复了 Bessel I 和 K 函数连分数中导致虚假上溢/下溢的问题。
    • 添加了 Thomas Luu 对非中心卡方分布分位数的改进。
  • 移动:
  • 元状态机:
    • 新特性:中断状态现在支持一系列事件来结束中断。
    • 修复了 Trac #8686
  • 多精度:
    • 添加了对 Boost.Serialization 的支持。
    • 抑制了一些 GCC 警告。请参阅 8872
    • 修复了对大整数参数使用 pow 时的错误。请参阅 8809
    • 修复了计算 0N 的 pow 中的错误。请参阅 8798
    • 修复了固定精度 cpp_int IO 代码中的错误,该错误导致当位数非常小(小于 CHAR_BIT)时转换为字符串失败。请参阅 8745
    • 修复了当固定精度类型溢出时导致左移失败的 cpp_int 中的错误。请参阅 8741
    • 修复了 cpp_int 中的一些外观警告。请参阅 8748
    • 修复了调用 C99 中需要是宏的函数的问题。请参阅 8732
    • 修复了导致 cpp_int 从 INT_MIN、LONG_MIN 等构造失败的错误。请参阅 8711
  • 多索引容器:
  • MPI:
    • 替换了对已弃用的 MPI 函数的调用
    • 添加了对多线程初始化的支持
    • 添加了原地集合操作
  • Phoenix:
    • #9049 phoenix::function 构造函数是 constexpr。
  • 多边形:
    • 使用 Sebastien Loriot 的补丁更新了 Voronoi 基准测试的 CGAL 部分。更新了文档。
    • 为 polygon_90_set_data 容器添加了多边形分解功能(来自 Intel 的补丁)。更新了文档。
    • 修复了 Trac 中的错误:#8197
  • PropertyMap:
    • 现在可以通过非破坏性地链接 .property(name, pm) 调用来构建 dynamic_properties 对象。示例
      boost::dynamic_properties()
        .property("color", color_map)
        .property("pos", position_map)
      
    • 使用原始指针作为属性映射已弃用;它过去经常在 Visual Studio 中失败。此用法已从 Boost.Graph 中的所有测试和示例中删除。用于图中顶点属性的替代方法(此功能最常见的用途)是
      boost::make_iterator_property_map(
        <pointer or container .begin() iterator>,
        get(boost::vertex_index, <graph object>))
      
      (注意:此代码中 get() 缺少命名空间限定对于通用代码是必要的)。在图上下文之外,最接近的等效项是
      boost::make_iterator_property_map(
        <pointer>,
        boost::typed_identity_property_map<std::size_t>())
      
      <boost/property_map/property_map.hpp> 的第 151 行和第 159 行上有一些被注释掉的静态断言,可以取消注释以查找用户代码中已弃用的指针用法。
  • 有理数:
    • 将 C++11 中添加的 std::numeric_limits 的成员 lowestmax_digits10 添加到单元测试代码中。由于 Boost.Test 在 C++11 模式下编译时会引用其中之一,因此这是必需的。
    • 将某些内部变量的初始化更改为不能是缩小转换的内容,这修复了问题 #5855。这是必需的,因为缩小转换在 C++11 中是错误。
  • SmartPtr:
    • 添加了 boost/smart_ptr/intrusive_ref_counter.hpp 头文件,该文件从 Boost.Log 中提取。该头文件实现了一个 mixin 基类,为用户的类添加了对 intrusive_ptr 的支持。
  • 线程:
    • 新功能
      • #8519 同步:使用完成函数更新类 barrier。
      • #8515 异步:添加 shared_future::then
      • #8519 同步:使用完成函数更新类 barrier
      • #8615 异步:将 make_future/make_shared_future 替换为 make_ready_future。
      • #8627 异步:添加 future<>::unwrap 和解包装构造函数。
      • #8677 异步:添加 future<>::get_or。
      • #8678 异步:添加 future<>::fallback_to。
      • #8891 upgrade_to_unique_lock:缺少 mutex() 函数。
      • #8955 请求更有效的方式从 future 获取 exception_ptr。
    • 修复的错误
      • #7461 detail::win32::ReleaseSemaphore 可能以 count_to_release 等于 0 的值调用
      • #8070 优先使用 GetTickCount64 而不是 GetTickCount
      • #8768 win32 condition_variable::wait_until 在极少数情况下无限等待。
      • #8817 Boost Thread Windows CE _createthreadex 处理破坏了 mingw w64。
      • #8943 在 Windows 上使用 Intel C++ Composer XE 2013 编译使用 boost::call_once 的代码失败。
      • #8931 external_locking 参考中的错别字。
      • #9029 文档中的拼写错误。
      • #9037 gcc -Wshadow 在 condition_variable{,_fwd}.hpp 中给出警告。
      • #9041 Boost.Thread DSO 可能需要与 Boost.Atomic 链接。
      • #9048 boost::scoped_thread 无用的带有可变参数模板参数的构造函数。
      • #9079 条件变量将永远等待某些时间点值 (Win)。
  • 定时器:
    • 修复了在 Intel 编译器上的编译 #8956
  • 类型特征:
    • 添加了 is_copy_contructible 特性 #8802
  • 无序:
    • 避免一些警告 (#8851, #8874)。
    • 避免通过迭代器上的 ADL 公开一些详细函数。
    • 解决 Visual Studio 2013 中的可变参数错误。编译器在初始化列表方面仍然存在问题,但可能无法解决这些问题。
  • 实用程序:
    • boost::result_of 可以设置为默认使用 TR1 协议,如果函数对象不支持(例如 C++11 lambda 函数),则回退到 decltype。定义 BOOST_RESULT_OF_USE_TR1_WITH_DECLTYPE_FALLBACK 配置宏以启用此模式。
    • 改进了 boost::base_from_member 类模板中对 C++11 的支持。如果编译器支持右值引用、可变参数模板和函数模板默认参数,则该类为构造函数参数实现完美转发。
    • 添加了 boost/utility/explicit_operator_bool.hppboost/utility/empty_deleter.hpp 头文件,这些文件是从 Boost.Log 中提取的。这些头文件分别实现了用于定义到 bool 的显式转换运算符以及一个不执行任何操作的删除器函数对象的实用程序。
  • 变体:
    • 修复了使用 const 右值输入参数的构造函数和赋值运算符的编译 #8988
    • 修复了当一个变体模板类具有不抛出复制构造函数和抛出移动构造函数时,移动赋值运算符的编译 #8772
    • 修复了禁用异常环境下的编译 #8717
    • 修复了无法访问的代码警告 #8665
    • 删除了重复代码 #7601
  • Wave:
  • xpressive:
    • #8843 在不完整的字符集处抛出异常而不是断言
    • #8880 删除未使用的本地 typedef
    • #8882 在 sequence_stack.hpp 中使用 RAII 而不是 try/catch
    • #8474 使 xpressive 与 clang 的 -Wimplicit-fallthrough 诊断良好配合

更新的工具

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang: 3.3、3.2、3.1、3.0
    • Clang, C++11, libc++: 3.4, 3.3
    • GCC: 4.8.1、4.7.3、4.6.3、4.5.3、4.4.7
    • GCC, C++11: 4.8.1
    • GCC, C++98: 4.8.1
  • OS X
    • GCC: 4.2
    • Apple Clang: 5.0
    • Apple Clang, C++11: 5.0
  • Windows
    • GCC, mingw: 4.8.0、4.7.2、4.6.3、4.5.4、4.4.7
    • Visual C++: 11.0、10.0、9.0

Boost 的其他测试编译器包括

  • OS X
    • Apple Clang: 5.0
    • Apple Clang, C++11: 5.0
    • Clang: trunk
    • Clang, C++11: trunk
    • GCC: 4.2.1
  • Linux
    • Clang: 3.3、3.2、3.1、3.0、trunk
    • Clang, C++11: 3.4
    • Clang, C++11, libc++: 3.4, 3.3
    • GCC: 4.9.0 (实验性)、4.8.1、4.7.3、4.6.4、4.5.3、4.4.7
    • GCC, C++11: 4.8.1
    • GCC, C++98: 4.8.1
    • Intel: 13.0.1、12.1.6
  • Windows
    • GCC, mingw: 4.8.0、4.7.2、4.6.3、4.5.4、4.4.7
    • Visual C++: 11.0、10.0、9.0

鸣谢

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