Boost C++ 库

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

版本 1.60.0

版本 1.60.0

2015年12月17日 15:52 GMT

文档

下载
平台文件
unixboost_1_60_0.tar.bz2
boost_1_60_0.tar.gz
windowsboost_1_60_0.7z
boost_1_60_0.zip

新库

  • VMD: 可变参数宏数据库,来自 Edward Diener。

更新的库

  • Atomic:
    • 强制执行了atomic<>存储的正确对齐。这应该可以修复在支持大于本机字大小的数据单元上的原子操作的平台上可能出现的问题。这也可能更改用户具有atomic<>成员的数据结构的二进制布局。
    • 修复了使用IBM XL C++编译器在PowerPC上的编译。修正了PowerPC汇编器中的内存屏障。
    • 修复了使用MSVC-8在ARM上的编译。
    • 修复了在使用128位原子操作时,使用gcc 4.4在x86-64上的编译。 (#10994)
    • 优化了一些用于x86/x86-64的gcc汇编器代码块,以减少使用的寄存器数量。这可能需要binutils 2.10或更高版本。
  • Chrono - 2.0.5:
    • 修复
      • #10778 VC14 CTP4 Atomic 无法使用非 TriviallyCopyable 的 boost::chrono 时间段编译
      • #10840 test_7868.cpp 中 puts 调用缺少 std:: 限定符
      • #10851 time_point_output.cpp 中 puts 调用缺少 std:: 限定符
      • #10893 Boost.Chrono 中的小文档拼写错误
      • #10992 Chrono IO 状态保存器与 Boost.IO 状态保存器不一致
      • #10995 duration_put::put_value 截断小数部分
      • #11006 由于多个错误,无法实例化 time_fmt_io_saver。
      • #11012 chrono_io v2 无法使用 boost::chrono::duration< boost::rational<int> > 编译
  • Container:
  • Context:
    • #11603 PPC32/MACH-O asm 中的拼写错误
    • 支持 CYGWIN
  • Core:
    • 在符号去混淆工具中,添加了对 Android NDK 中使用的 gabi++ ABI 实现的支持。
    • 添加了一个新的enable_if_has_type工具,用于对嵌套类型的存在执行 SFINAE 检查。
  • Filesystem:
    • 新功能
    • 问题
      • 修复了 #11733, boost/libs/filesystem/src/unique_path.cpp 中缺少 unistd.h 包含,通过应用来自 Idar Tollefsen 的补丁。
      • 修复了 #5706, Windows 上临时用户配置文件中的 unique_path 失败,通过应用来自 Sebastian Redl 的 pull request #15 来修复 unique_path 中的竞争条件。
      • 修复了 #10591, boost::filesystem 未在 iOS 8 上构建,通过应用由 Daniel Seither 提交的补丁。
      • 修复了 #9454, 当定义了 BOOST_FILESYSTEM_NO_DEPRECATED 时,Boost Filesystem [库构建] 未编译,通过应用由 Makesim 提交的补丁。
      • 修复了 #11447, __OpenBSD__ 宏名称拼写错误,通过应用由 Jasper Lievisse Adriaanse 提交的补丁。
      • 修复了 #11288, 用于避免冗余字符串分配的补丁,通过应用由 Yevhen Ivannikov 提交的补丁。
      • 解决了 #11175, 过时的文档导致用户错误地期望该库可以在禁用异常的情况下使用。
      • 解决了 #11166, 通过减轻(即降低可能性)remove() 中可能的外部文件系统竞争。
      • 修复了 #7258, 如果路径以斜杠结尾,则 create_directories 返回 false。 此外,还修复了路径包含点或点点元素的相关问题,并向测试套件添加了测试用例。
      • 解决了 #10766, 具有冗余分隔符的 parent_path() 返回错误的值,通过向参考文档添加示例和注释,以显示为什么返回的值实际上是正确的,并为该行为提供理由。 请参阅 path.itr, 和 path.decompose 参考文档的 parent_path()filename() 部分。
      • 关闭了 #7607, 路径不应在以斜杠结尾的路径末尾推断出不可见的 ".",如 #7258#10766 所解决的那样。
      • 关闭了 #11061, #11062, 无法遍历反向迭代器的路径,正如通过添加类 path 反向迭代功能所有效解决的那样。 参考文档也已更新,其中包含 note 警告有关类 path 迭代器的限制。
    • 其他修复
      • 清除了几个虚假的 GCC 警告。
      • 修复了 file_statusrecursive_directory_iterator 中的错误:C++ 将除第一个参数外的所有参数都默认的显式构造函数转换为非显式单参数构造函数。
      • 应用参考文档编辑清理:使用与文档其余部分相同的样式表。调整选项卡字体大小。修复表格,概要中的过长行。
      • 小修复,包括来自 Jonathan Wakely 和 Marcel Raad 的 pull request。
  • Flyweight:
    • 维护修复。
  • Fusion:
    • 所有 fusion 容器和生成器现在都支持 C++11 可变参数模板。 (pull-request 89, pull-request 97, pull-request 100)
      • fusion::vector 的特别提示
        • 由于实现限制,编号形式(即 fusion::vectorN)通过 C++11 别名模板提供,并在 C++11 或更高版本中已弃用。 在这种情况下,您应该检查 BOOST_FUSION_HAS_VARIADIC_VECTOR 宏并切换用法,因为某些部分专业化将变为编译错误(例如,Spirit 的 pull-request)。
    • fusion::nview 现在支持 C++11 可变参数模板。 (pull-request 90)
    • fusion::fold 现在是 SFINAE 友好的。 (pull-request 102)
    • 错误修复
      • 通用的 fusion 序列转换为 deque 时,出现编译器错误。 (#11572)
      • (doc) 函数的返回类型不正确。 (#3358)
  • Geometry:
    • 已解决的问题
      • #10803 Union 算法返回无效的几何图形
      • #11522 traits::detail 的 buffer 中的命名空间冲突
      • #11533 如果最小元素数为 1,则由 remove() 中的错误引起的 rtree 中的断言失败
      • #11607 私有 geometry::exception::what()
      • #11709 is_simple 段错误
      • #11710 is_simple - 空几何图形逻辑
      • #11711 is_simple 和 is_valid - NaN 或 Infinity 的点
    • Bugfixes
      • 修复了接触内部环/外部环的共位,其中它也接触另一个多边形
      • 修复了从空 rtree 中删除值 - 无效果并返回 0 而不是断言失败
      • 修复了包含空单个几何图形的多个几何图形的质心的段错误(感谢 Jiri Drbalek)
      • 修复了积分坐标的 liang_barsky 策略(感谢 Dane Springmeyer)
  • Interprocess:
  • Intrusive:
  • Lexical Cast:
    • 修复了 lexical_cast 与仅移动类型的使用 #11570
    • 修复了定义 BOOST_LCAST_NO_COMPILE_TIME_PRECISION 时的崩溃 #11669
    • 抑制了 #11570#4946 中报告的某些警告
  • Locale:
    • 实现了通用 codecvt facet 并添加了通用 utf8_codecvt facet
    • 为 FreeBSD 10.0 及更高版本添加了 posix locale 支持
    • 修复了问题 #10017 (SunOS 上的 sun 重定义), #11163 (set_default_messages_domain 行为不正确), #11673 构建问题
    • 清理了一些警告
    • 修复了最新 ICU 版本的测试
    • 添加了针对 libc++ 问题的解决方法
    • 添加了新的宏定义 BOOST_LOCALE_ENABLE_CHAR16_TBOOST_LOCALE_ENABLE_CHAR32_T 以启用 C++11 的 char16_tchar32_t,而不是已弃用的版本
  • 日志:
    • 常规变更
      • 在 Windows 上,配置宏 BOOST_LOG_USE_WINNT6_API 不再被库使用。目标 Windows 版本应通过定义宏 BOOST_USE_WINAPI_VERSION 进行配置。
    • 错误修复
      • 修复了使用 Google NDK 的 Android 编译问题。 (#11559)
      • 修复了一些日志语句的编译问题,其中要放入流的第一个对象不被 formatting_ostream 直接支持。 (#11549)
      • 为 Solaris Studio 12.4 添加了一个解决方法,应该可以修复 formatting_ostream 的编译问题。 (#11545)
      • 修复了禁用本机 wchar_t 类型时的编译问题。 (#11541)
      • 修复了从类 POSIX 系统上的 boost_log_setup 库导出符号的问题。
      • 修复了字符修饰符的编译问题。
      • 添加了一个针对文本文件 sink 后端中文件名包含日期/时间占位符时生成不正确文件名问题的解决方法。 (#11691)
    • 有关更多详细信息,请参阅 更新日志
  • Multi-index Containers:
    • 修复了与 Qt 的互操作性问题,原因是该框架中可以选择性地定义一个名为 foreach 的宏。
    • 维护修复。
  • odeint:
    • 新功能
      • 添加了功能,如果执行了过多的 ODE 步骤,则抛出异常。
      • 添加了限制自适应方法中最大步长的可能性。
    • 多个错误修复,请参阅 https://github.com/headmyshoulder/odeint-v2/issues
  • Optional:
    • 再次更改了 boost::none 的实现。现在它是一个具有内部链接的 const 对象(与任何其他标签一样)。 这修复了 #11203
  • Predef:
    • 添加了对 SIMD 硬件的检测。
    • 有关更多详细信息,请参阅 历史记录
  • Test:
  • Thread - 4.6.0: 新的实验性功能:
    • #11231 允许将 continuation future 的析构函数行为设置为非阻塞
    • #11424 提供 shared_timed_mutex 作为 shared_mutex 的替代名称,并弃用将 shared_mutex 用作定时互斥锁
    • #11734 future::then(Cont) 应该能够在不确定的线程上执行 continuation
    • #11736 允许在 future::then(launch::executor, cont) 上使用 launch::executor
    • #11737 添加一个 launch::inherit 策略,该策略可用于 ::then() 以使用父 future 的策略 修复的错误:
    • #3926 thread_specific_ptr + dlopen 库导致 SIGSEGV。
    • #6377 更改时间时,条件变量阻塞
    • #6787 如果系统时间回滚,boost::thread::sleep() 挂起
    • #7665 this_thread::sleep_for 不再在线程中使用 steady_clock
    • #7720 在互斥锁的密集锁定/解锁期间出现异常 lock_error
    • #9309 test_latch 经常在 clang-darwin-tot11 上失败
    • #10788 GetLogicalProcessor 不适用于小于或等于 0x0502 的 Windows 平台
    • #11090 ex_future_unwrap- ThreadSanitizer: lock-order-inversion(潜在的死锁)
    • #11158 使用 faketime 时,Pthread 线程死锁
    • #11174 boost::condition_variable::timed_wait 带有谓词意外唤醒,而应该无限等待
    • #11185 不正确的 URL 重定向
    • #11192 当回调返回 future 时,带有 executor 的 boost::future<>::then() 不会编译
    • #11250 从 make_exceptional 创建的 future 在析构函数中出现断言失败
    • #11256 在 continuation 函数中 future<>::is_ready() == false
    • #11261 basic_thread_pool 中错误地使用了 scoped threads
    • #11262 shared_state_nullary_task 中错误地使用了直接指针
    • #11263 锁已经被锁定
    • #11266 boost::packaged_task 具有无效的可变参数签名
    • #11302 boost thread 无法使用 BOOST_THREAD_PATCH 构建。
    • #11322 sleep_for() 纳秒重载在 Windows 上总是过早返回
    • #11329 使用 GetProcessHeap 的声明失败
    • #11368 boost thread 对 CreateWaitableTimer 的使用会将 PC 从睡眠状态唤醒 (doh)
    • #11377 Boost 条件变量始终等待系统时钟截止时间
    • #11435 future.hpp 中的 gcc 编译器警告
    • #11555 devector.hpp 假定 allocator_traits_type 始终存在
    • #11562 在 Ubuntu 64 位上将计算机时间设置为向前后,计时器(使用 steady_clock)到期
    • #11672 Thread: 应该使用 unique_ptr,而不是 auto_ptr
    • #11688 thread::try_join_until:如果系统时钟发生变化,避免忙等待
    • #11716 ::then(f) 应该继承父 Executor
  • UUID:
    • 添加了针对 MSVC 代码生成错误的解决方法,该错误可能导致在比较 UUID 时发生崩溃。
    • 添加了对使用 MSVC 编译器开关启用 AVX 的检测。

新闻

Windows 用户注意事项

如果编译器支持足够新的 Windows SDK,则此版本的 Boost 默认情况下将为 Windows Vista/Windows Server 2008 编译,否则将为 Windows XP 编译。 使用默认选项编译的二进制文件可能无法在较旧的 Windows 版本上运行。

仍然可以通过将 BOOST_USE_WINAPI_VERSION 定义为 Windows API 的数字版本来显式指定目标 Windows 版本。 例如,可以使用以下命令为 Windows XP 构建 Boost

    b2 release define=BOOST_USE_WINAPI_VERSION=0x0501

可以在 页面上查看 Windows API 版本号列表。

此更改仅涉及使用通用 Windows API 抽象层的库。 目前,这些库是:Boost.Chrono、Boost.Dll、Boost.Log、Boost.UUID。 这也将影响所有依赖库。

Hana 的发布推迟

由于时间限制,Hana 的发布将推迟到 Boost 的更高版本。 这也将允许在作为 Boost 的一部分正式发布该库之前,妥善解决一些已知问题。 更多信息可以在 邮件列表中找到。

Boost.DLL 库的发布推迟

为了提供对不常见工具集和平台的卓越支持,Boost.DLL 的发布已推迟到 Boost 的更高版本。 这也允许更好地测试最近添加的复制构造和复制分配 boost::dll::shared_library 实例的能力,并提供有关导入具有非默认调用约定的函数的示例。 库的最新版本和开发者文档可以在 GitHub 仓库中找到。

测试的编译器

Boost 的主要测试编译器是

  • Linux
    • Clang: 3.4, 3.6
    • Clang, C++14: 3.7
    • GCC: 4.4.7, 4.8.4, 4.9.3, 5.1.0, 5.2.1
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3
  • Windows
    • GCC, C++03, mingw: 3.4.5
    • GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
    • GCC, C++14, mingw: 4.9.3, 5.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android
    • Clang: 3.6, 3.7
    • GCC: 4.9.0, 5.2.0
  • QNX
    • QCC: 4.4.2
  • SunOS
    • Oracle Solaris Studio: 12.4, 12.5

Boost 的其他测试编译器包括

  • Linux
    • Clang: 3.0, 3.1, 3.2, 3.3, 3.4.2, 3.6.0, 3.8.0
    • Clang, C++14: 3.7.0
    • GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 4.9.3, 5.1.0, 6.0.0
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3, 5.2.1
    • IBM XL C++: 13.1.2.0
    • Intel: 16.0
  • OS X
    • Clang: 7.0.0
    • GCC: 5.2.0
  • Windows
    • GCC, C++03, mingw: 3.4.5
    • GCC, C++11, mingw: 4.7.3, 4.8.1
    • GCC, C++14, mingw: 4.9.3, 5.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android
    • Clang: 3.6, 3.7
    • GCC: 4.9.0, 5.2.0
  • FreeBSD
    • Clang, C++11: 3.4.1, 3.7.0
    • GCC, C++11: 4.8.5, 5.2.0, 6.0.0
  • QNX
    • QCC: 4.4.2
  • SunOS
    • Oracle Solaris Studio: 12.4, 12.5

致谢

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