版本 1.62.0
2016 年 9 月 28 日 15:17 GMT
文档
第三方下载
新库
- Fiber:
- Oliver Kowalke 提供的用于用户态线程/协程的框架。
- QVM:
- Boost 是一个通用的库,用于处理静态大小的四元数、向量和矩阵,重点在于图形、视频游戏和模拟应用所需的 2、3 和 4 维操作,作者是 Emil Dotchevski。
更新的库
-
Atomic:
- 改进了对 Oracle Studio 和 SPARC 的支持。该库现在为 SPARCv8+ 提供了原生的原子操作。
-
Chrono:
-
#11330 boost::chrono::duration 的默认构造函数未初始化 rep_
-
#11618 Chrono IO V2 文档 ios_state.hpp 不存在
-
#11631 Chrono io v2 不支持自定义时钟
-
Circular Buffer:
- 在调试模式下,默认不再使用调试实现。调试实现不具备与正常(发布)实现或其他容器相同的线程安全保证。因此,`BOOST_CB_DISABLE_DEBUG` 宏不再使用。现在应该定义 `BOOST_CB_ENABLE_DEBUG=1` 来启用调试支持。(#6277)
-
Container:
- 修复的错误
- 修改了所有容器的默认和移动构造函数的 noexcept 表达式。
- 为 `map` 和 `flat_map` 实现 C++17 `insert_or_assign`/`try_emplace`。
- 为 `map`、`multimap`、`set`、`multiset` 实现 C++17 `extract`/`insert(node)`。
-
Context:
-
#12215 在 Windows 上使用默认的 fixedsize_stack 时所有堆栈都损坏
-
#12242 Intel C++ 编译器在 MacOS 上存在构建问题
- 修复了 execution_context_v1 的堆栈展开
-
Coroutine:
-
Coroutine2:
-
#12221 coroutine<>::push_type 函数在没有推送的情况下启动
- 不要吞咽在 coroutine<>::push_type 构造时抛出的异常
-
DLL:
-
Functional/Forward:
-
几何:
-
改进
- Union:确保输出有效(有例外),即使对于自相切的多边形或共享边
- SVG:支持 boost::variant 几何图形
- SVG:坐标现在(默认)以双精度写入 svg
- 重命名命名空间 `concept` 为 `concepts`,以避免与最新编译器发生冲突
- 新的球形交集策略,用于球形和地理几何形状的关系和集合运算(之前所有坐标系都使用笛卡尔交集策略)。
-
已解决的工单
-
#12189 当输入点的类型不同时,关系运算无法编译
-
#12287 rtree.query() 对 contains() 谓词的结果无效
-
Interprocess:
-
Intrusive:
-
Lexical Cast:
-
Log:
- 新功能
- 增加了用于本地机器进程间日志记录的新工具。实现包括一个资源名称包装器、一个进程间消息队列和一个接收器后端。
- 添加了一个新的字符装饰器 `max_size_decor`。这个新的装饰器允许将其包装的格式化器输出限制在指定的长度内。
- 错误修复
- 修复了日志流可能在不同日志记录之间保留格式设置的问题。(#12178)
- 有关更多详细信息,请参阅 更改日志。
-
数学:
- 新功能
- 启用所有特殊函数代码,使其能够正确处理精度可能在运行时发生变化的类型:例如 Boost.Multiprecision 的 `mpfr_float` 类型。
- 补丁
- 修复了 `tgamma_delta_ratio` 在 delta 相对于基数很小时的情况。
- 修复了杂项 GCC-4.4 测试失败。
-
Optional:
-
Phoenix:
-
Regex:
- 修复在解析某些无效正则表达式时发生的缓冲区溢出错误,参见 #12222。
- 修复库构建中对 ICU 的检测,参见 #12152。
- 修复了大小写敏感性更改中的 bug,参见 #11940。
- 允许 `\x{}` 表达式中使用比 int 更宽的类型(例如 char32_t 等),参见 #11988。
-
Test:
- Boost.test v3.3,更多详情请参阅 更改日志部分。
- 新功能
- 由数据集驱动的测试用例现在具有唯一的名称,并且数据集的所有样本测试都位于同一个测试套件内
- Boost.test 新增了一个命令行开关 `--logger`,用于在一个命令中设置测试记录器及其参数
- Boost.test 支持同时使用多个记录器,每个记录器都有自己的日志级别和输出流
- Boost.test 新增了一个名为 `JUNIT` 的记录器,能够输出 Junit/xUnit 兼容的流
- 现在可以通过环境变量 `BOOST_TEST_RUN_FILTERS` 指定多个测试过滤器
- 错误修复
- Trac tickets #8707, #8834, #11128, #11845, #11859, #12024,
- Trac tickets #12093, #12103, #12224, #12241, #12257, #12378
- Pull request PR81
-
Thread:
-
#12102 当禁用 BOOST_THREAD_PROVIDES_INTERRUPTIONS 时,condition_variable_fwd.hpp 编译失败
-
#12120 thread/barrier.hpp 的性能改进
-
#12146 make_exceptional_future 未在文档中提及
-
#12202 shared_lock 应在 shared_mutex 头文件中
-
#12371 boost thread/future.hpp 构建失败
- #88 修复 boost::upgrade_lock 中的拼写错误
- #89 修复 upgrade_to_unique_lock<>::operator=() 中的 bug
- #90 修复 try_lock_wrapper<>::operator=() 中的 bug
- #91 将 shared_lock_guard 添加到包含的锁类型中
- #92 修复了 MSVC-8 的编译。
- #93 修复变量阴影警告 (Clang)
- #94 修复 boost::barrier 中的 bug
- #95 修复 boost::completion_latch 中的错误
- #96 将 async_func.hpp 重命名为 invoker.hpp。
- #97 修复 sync_timed_queue<>::pull_until() 中的错误
-
TypeIndex:
-
在 C++14 中,`ctti_type_index` 被设为 constexpr。现在可以在编译时检索类型的实际名称为 `const char*`。因此,我们可以在 **编译时** 做很多有趣的事情:检查类型的命名空间、根据类型的词法表示对类型进行排序、检查类型是否是模板类型等等……提供了一些示例。
- 修复了 MSVC 中类型名称的 `noexcept` 问题以及类型名称中的空格问题(从 klemens-morgenstern/develop 拉取)
- 修复了拼写错误 pull-request 7
- 改进了 CI 测试
-
Unordered:
- 移除对已弃用的 `boost::iterator` 的使用。
- 修复了 `unordered_multiset` 和 `unordered_multimap` 赋值中的异常安全问题。
- 更多详情请参阅 更改日志。
-
Variant:
- 修复了从派生自 variant 的类构造 variant 的问题 #7120, #10278, #12155
- Variant 构造函数和赋值运算符现在不会参与重载解析,如果 variant 无法容纳输入类型 #5871, #11602
- 修复了 C++11 中的隐式转换运算符问题 #8555
- 修复了 variant holding non-const reference 时的比较问题 #11751
- 修复了 variant 的移动赋值的 noexcept 问题 #11696
- 修复了 includes 中的双引号问题 #12057
- 删除了 BOOST_VARIANT_NO_REFERENCE_SUPPORT 宏,并放弃了对不支持 SFINAE 的编译器的支持 #12250
- 抑制 MPL end iterator 的隐式实例化
- 多项小修复(拼写错误、缺失的 includes)
测试的编译器
Boost 的主要测试编译器是:
- Linux
- Clang: 3.0, 3.8.0
- Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.0
- Clang, C++14: 3.5, 3.6, 3.7, 3.8.0, 3.8.1, 3.9.0
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.2.0, 6.1.1
- GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1
- GCC, C++14: 5.2.0, 5.3.0, 5.4.1, 6.1.1
- Intel: 16.0
- Intel, C++11: 16.0
- Intel, C++14: 16.0
- Windows
- GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0
- GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
- GCC, C++14, mingw: 6.1.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
- Android
- Clang: 3.6, 3.7, 3.8
- GCC: 4.9, 5.4, 6.1
- FreeBSD
- Clang: 3.4.1, 3.7
- GCC: 4.8.5, 5.4.0, 6.1.1
- QNX
- SunOS
- Oracle Solaris Studio: 12.5
- Oracle Solaris Studio, C++11: 12.5
Boost 的其他测试编译器包括:
- Linux
- Clang: 3.0, 3.8
- Clang, c++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8
- Clang, c++14: 3.5, 3.6, 3.7, 3.8, 3.9
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 4.8.4, 5.2.0, 6.1.1
- GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1
- GCC, C++14: 5.2.0, 5.3.0, 5.4.1, 6.1.1, 7.0.0 (experimental)
- Intel: 16.0
- Intel, C++11: 16.0
- Intel, C++14: 16.0
- OS X
- Apple Clang: 7.3.0
- G++: 6.1.0
- Windows
- Clang: 3.8.1
- GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0
- GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
- GCC, C++14, mingw: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0
- GCC, cygwin: 5.4.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
- Android
- Clang: 3.6, 3.7, 3.8
- GCC: 4.9, 5.4, 6.1
- FreeBSD
- Clang, C++11: 3.4.1, 3.7.0
- GCC, C++11: 4.8.5. 5.4.0, 6.1.1
- Haiku
- QNX
- SunOS
- Oracle Solaris Studio: 12.5
- Oracle Solaris Studio, C++11: 12.5
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此次发布。