Boost C++ 库

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

版本 1.59.0

版本 1.59.0

2015年8月13日 15:23 格林尼治标准时间

文档

下载
平台文件
unixboost_1_59_0.tar.bz2
boost_1_59_0.tar.gz
windowsboost_1_59_0.7z
boost_1_59_0.zip

已知问题

  • Boost.Log 包含一个回归问题,阻止了一些日志语句编译 (#11549)。这个问题已在 git 中修复。

新的库

  • Convert: 来自 Vladimir Batov 的一个可扩展且可配置的类型转换框架。
  • Coroutine2: (C++14) 来自 Oliver Kowalke 的协程库。

更新的库

  • 上下文:
    • #11223 检查对 std::integer_sequence 的支持
    • execution_context 在内部使用 Windows 纤程和 BOOST_USE_WINFIBERS
    • 支持 Windows (32 位) 上 MinGW 的汇编程序
  • 协程:
    • #10978 删除多余的分号
    • #11230 coroutine_error 返回悬空异常消息指针
    • #11234 与 boost::range::algorithms 一起使用时无法编译
    • #11356 使用 BOOST_USE_SEGMENTED_STACKS 时协程出现段错误
  • 融合:
    • 为序列添加新的概念Unbounded Sequence和为迭代器添加新的概念Unbounded Iterator。目前,Unbounded Sequence影响fusion::(value_)at(_c)fusion::(value_)at_key的行为。Unbounded Iterator没有效果(为将来的版本保留)。更多详细信息,请参见无界序列无界迭代器。( pull-request 85)
    • fusion::list添加对 C++11 可变参数模板的支持。( pull-request 84)
    • 已修复的错误
      • 修复缺少包含<utility>。( #11161)
      • 恢复一些 constexpr 支持,1.58.0 中的回归。( #11211#11267)
      • 修复由于缺少包含而导致的折叠编译错误。( #11249)
      • 修复自适应空结构的编译错误,1.58.0 中的回归。( #11269)
      • 删除对序列比较的过时(且不正确)的解决方法的使用,它影响 MSVC-8 和更早的版本。( pull-request 78)
      • 修复复制从 fusion::list 派生的序列时的编译错误,1.58.0 中的回归。( pull-request 87)
      • 修复复制 fusion::tuple 时的编译错误。( #11140)
      • 为带有 constexpr 的 GCC 4.6 添加解决方法。( #11517)
  • 几何:
    • 附加功能
      • 添加了 rtree const_iterator、begin()、end() 和对 Boost.Range 的支持。
      • 在几何模型中支持 C++11 std::initializer_list
      • 不相交和相交支持以下几何组合:多点/线串,多点/多线串。
      • 添加了 relate() 和 relation() 算法。
      • 已为点状和线性几何的组合实现交集
      • 添加了 difference(pointlike, linear) 的实现
      • 新的算法 is_empty,如果几何表示空集则返回 true
      • envelope 算法支持球面赤道坐标系中的点状和线性几何
      • envelope 算法支持地理坐标系中的点状几何
    • 改进
      • 将 rtree const_query_iterator 类别升级到 ForwardIterator。
      • 多点周围缓冲区的缓冲区性能得到显著提高
    • 重大更改
      • 缓冲区侧策略现在返回 error_code 而不是 bool。如果您有自己的自定义侧策略,则应对其进行调整
    • 已解决的工单
      • #11113 支持使用 BOOST_FOREACH 轻松枚举所有元素
      • #11232 功能请求 - relate()
      • #11236 整型坐标类型的 centroid() 结果无效
      • #11268 boost::geometry::intersection 接口与多线串和框的回归——在 1.57 VS 1.55 上无法编译
      • #11332 坐标差异极端时缓冲区的断言失败
      • #11346 段迭代器不适用于返回值而不是引用的范围
      • #11436 sym_difference(py1, py2, mpy) 返回无效的多边形
    • 错误修正
      • 缓冲区:使用更强大的方法来计算交点的边,这修复了缓冲区生成中的几个错误
      • 修复了从 IP 计算到的线段的选择,在两条线段的交点中。现在选择靠近线段点点的线段,或者选择最短线段上的线段。这避免了(很少发生)生成微小的三角形,使输出多边形无效
      • 在重新缩放时四舍五入而不是截断到整数网格(此修复和前面提到的修复可能会对输出几何产生一些影响)
      • 修复 detail::has_spikes 中潜在的无限循环(如果传递的点具有 NaN 坐标,则可能会发生循环)
  • 侵入式:
    • 实现了map 和 multimap 类接口
    • 重构哈希表容器以减少模板实例化。
  • 词法转换:
    • 修复警告
    • 简化元编程(感谢 Edward Diener)
  • 日志:
    • 一般更改
      • 在支持符号可见性的系统(例如 Linux)上,库现在使用所有内部符号隐藏构建。
      • 重大更改:该库已移植到 Boost.TypeIndex 用于其底层类型信息管理工具。这影响了以下公共接口
        • 库抛出的invalid_type异常现在附加了typeindex::type_index作为违规类型的描述。以前通过type_info_wrapper标识类型。
        • Boost.Exception type_info_info错误信息现在包含typeindex::type_index而不是type_info_wrapper
        • attribute_value::get_type()现在返回typeindex::type_index而不是type_info_wrapper。用户定义的属性值实现也应进行类似更改(attribute_value::impl::get_type()虚方法现在也返回typeindex::type_index)。
      • type_info_wrapper组件已弃用,将在未来的版本中删除。建议使用 Boost.TypeIndex 作为替代。
      • 删除了以前已弃用的头文件:boost/log/utility/intrusive_ref_counter.hppboost/log/utility/explicit_operator_bool.hppboost/log/utility/empty_deleter.hpp
      • 添加了对为 OpenBSD 构建库的支持。( #11446)
      • 改进了用于异步日志记录的事件同步原语的内部实现。( #11398)
    • 错误修复
      • 修复了attribute_value_set::insert()attribute_value_set构造函数在某些情况下的不正确行为。( #11190)
    • 有关更多详细信息,请参见更改日志
  • 移动:
  • 多索引容器:
  • 预定义:
    • 修复了predef_check功能的许多问题。
    • 更新SunPro检测以适应Oracle最新的编译器版本。
    • 在Boost Build端为predef_check表达式添加andor逻辑运算符。
    • 修复BOOST_ARCH_PARISC的拼写错误。
    • 修复MAKE_YYYYM宏以正确限制月份。
  • 程序选项:
    • 修复了使用MSVC和MinGW时的编译错误、缺少dllexport以及警告 (Daniela Engert, Marcel Raad)。
    • 修复了未初始化的字段 (Zoey Greer)。
    • 阻止具有隐式值的选项消耗单独的标记 (Michael John Decker)。
    • 将多标记限制设置为最大整数值,而不是32K (Hans Hohenfeld)。
    • 代码格式和文档修复 (Jurko Gospodnetić, Lauri Nurmi)。
    • 对无RTTI构建提供最小支持 (Minmin Gong)
    • 不要将环境指针递增到结尾之外 (Vladimir Prus)
  • 属性树:
    • 一个新的JSON解析器,具有完整的Unicode支持。
    • 重大更改:新的解析器不支持JSON文件中的注释或字符串连接。这些功能是旧解析器的非标准扩展,但它们的移除可能会破坏依赖它们的代码。
  • Boost.Test v3:
  • 类型索引:
    • 删除了对某些Boost库的依赖,以提高编译速度和模块化。
    • 修复了测试中的警告并进行了其他维护改进。
  • 变体:
    • 修复了element_index.hpp中缺少的包含 #11196, #11283
    • 修复了在C++14和const引用中使用boost::apply_visitor的问题 #11251, #11285
    • 放宽了所有get<reference>(variant_variable)函数的编译时检查 (感谢Nicolas Cornu)

已测试的编译器

Boost的主要测试编译器是:

  • Linux
    • Clang: 3.4
    • Clang, C++14: 3.6
    • GCC: 4.4.7, 4.8.2, 4.9.3
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3
    • Intel: 15.0
  • Windows
    • Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android
    • Clang: 3.6
    • GCC: 4.8, 4.9
  • SunOS
    • Sun: 6.0
  • QNX
    • QCC: 4.4.2

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

  • Linux
    • Clang: 3.0, 3.1, 3.2, 3.3, 3.4
    • Clang, C++14: 3.6, 3.7
    • GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 5.1.0, 6.0.0
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3, 5.1.1
    • Intel: 15.0
  • Android
    • Clang: 3.6
    • GCC: 4.8, 4.9
  • FreeBSD
    • Clang: 3.4.1
    • GCC: 4.8.5, 5.1.0, 6.0.0

致谢

Beman Dawes,Eric Niebler,Rene Rivera,Daniel James,Vladimir Prus和Marshall Clow负责此次发布。