Boost C++ 库

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

版本 1.60.0

版本 1.60.0

2015年12月17日 15:52 格林尼治标准时间

文档

下载
平台文件
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<>成员的用户数据结构的二进制布局。
    • 修复了使用 IBM XL C++ 编译器在 PowerPC 上的编译问题。修正了 PowerPC 汇编程序中的内存屏障。
    • 修复了使用 MSVC-8 编译 ARM 代码的问题。
    • 修复了在使用 128 位原子操作时,使用 gcc 4.4 编译 x86-64 代码的问题。(#10994
    • 优化了一些 gcc x86/x86-64 汇编代码块以减少使用的寄存器数量。这可能需要 binutils 2.10 或更高版本。
  • Chrono - 2.0.5:
    • 修复
      • #10778 VC14 CTP4 原子操作无法与不是 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> > 一起编译
  • 上下文:
    • #11603 PPC32/MACH-O 汇编中的错别字
    • 支持 CYGWIN
  • 核心:
    • 在符号反混淆工具中,添加了对 Android NDK 中使用的 gabi++ ABI 实现的支持。
    • 添加了一个新的enable_if_has_type工具,用于执行嵌套类型存在的 SFINAE 检查。
  • 文件系统:
    • 新特性
    • 工单
      • 修复#11733,通过应用来自 Idar Tollefsen 的补丁修复 boost/libs/filesystem/src/unique_path.cpp 中缺少 unistd.h 包含的问题。
      • 修复#5706,通过应用 Sebastian Redl 的pull request #15 来修复unique_path中的竞争条件,从而修复了临时用户配置文件中 unique_path 在 Windows 上失败的问题。
      • 修复#10591,通过应用 Daniel Seither 提交的补丁修复 boost::filesystem 无法在 iOS 8 上构建的问题。
      • 修复#9454,通过应用 Makesim 提交的补丁修复定义 BOOST_FILESYSTEM_NO_DEPRECATED 时 Boost Filesystem [库构建] 无法编译的问题。
      • 修复#11447,通过应用 Jasper Lievisse Adriaanse 提交的补丁修复__OpenBSD__宏名称拼写错误的问题。
      • 修复#11288,通过应用 Yevhen Ivannikov 提交的补丁修复避免冗余字符串分配的问题。
      • 解决#11175,过时的文档导致用户错误地预期该库可以与禁用异常一起使用。
      • 通过减轻(即降低可能性)remove()中可能的外部文件系统竞争来解决#11166
      • 修复#7258,如果路径以斜杠结尾,create_directories将返回 false。如果路径包含点或点号元素,则还修复相关问题,并向测试套件添加了测试用例。
      • 解决#10766,通过向参考文档添加示例和说明来解释为什么返回的值实际上是正确的,并提供该行为的理由,从而解决了带有冗余分隔符的parent_path()返回错误值的问题。请参阅path.itrpath.decompose参考文档中parent_path()filename()部分。
      • 关闭#7607,路径不应推断以斜杠结尾的路径末尾的隐式“.”,如#7258#10766已解决。
      • 关闭#11061#11062,无法遍历反向迭代器的路径,如通过添加类path反向迭代功能有效解决。参考文档还更新了一个关于类path迭代器限制的说明
    • 其他修复
      • 清除一些虚假的 GCC 警告。
      • 修复file_statusrecursive_directory_iterator中的错误:C++ 将除第一个之外所有参数都默认为显式构造函数转换为非显式单参数构造函数。
      • 应用参考文档编辑清理:使用与文档其余部分相同的样式表。调整制表符字体大小。修复表中过长的行,提纲。
      • 次要修复,包括来自 Jonathan Wakely 和 Marcel Raad 的拉取请求。
  • 轻量级:
    • 维护修复。
  • 融合:
    • 所有融合容器和生成器现在都支持 C++11 可变参数模板。(pull-request 89pull-request 97pull-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
    • 错误修复
      • 通用融合序列转换为 deque 会导致编译器错误。(#11572
      • (文档)函数的返回类型不正确。(#3358
  • 几何:
    • 已解决的工单
      • #10803 并集算法返回无效几何图形
      • #11522 traits::detail 的缓冲区中的命名空间冲突
      • #11533 如果最小元素数量为 1,则 rtree 中断言失败由 remove() 中的错误引起
      • #11607 私有 geometry::exception::what()
      • #11709 is_simple 段错误
      • #11710 is_simple - 空几何逻辑
      • #11711 is_simple 和 is_valid - 为 NaN 或 Infinity 的点
    • 错误修正
      • 修复接触内环/外环的共位点,它也接触另一个多边形。
      • 修复从空 rtree 中删除值 - 无效且返回 0 而不是断言失败。
      • 修复包含空单个几何图形的多几何图形的质心中的段错误(感谢 Jiri Drbalek)。
      • 修复整数坐标的 liang_barsky 策略(感谢 Dane Springmeyer)。
  • 进程间通信:
  • 侵入式:
  • 词法转换:
    • 修复了使用仅限移动类型的lexical_cast的问题 #11570
    • 修复了定义BOOST_LCAST_NO_COMPILE_TIME_PRECISION时发生的崩溃 #11669
    • 抑制了#11570#4946中报告的部分警告
  • 区域设置:
    • 实现了通用的codecvt facet并添加了通用的utf8_codecvt facet
    • 为FreeBSD 10.0及以上版本添加了POSIX区域设置支持
    • 修复了问题#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。应通过定义宏BOOST_USE_WINAPI_VERSION来配置目标Windows版本。
    • 错误修复
      • 修复了使用Google NDK进行Android编译的问题。(#11559
      • 修复了一些日志语句的编译问题,其中第一个放入流的对象不受formatting_ostream直接支持。(#11549
      • 添加了针对Solaris Studio 12.4的解决方法,这应该可以修复formatting_ostream的编译问题。(#11545
      • 修复了禁用原生wchar_t类型时的编译问题。(#11541
      • 修复了在类POSIX系统上从boost_log_setup库导出符号的问题。
      • 修复了字符装饰器的编译问题。
      • 添加了针对文本文件接收器后端中文件名生成不正确的解决方法,当文件名包含日期/时间占位符时。(#11691
    • 查看变更日志了解更多详情。
  • 多索引容器:
    • 修复了与Qt的互操作性问题,原因是此框架中可选定义了一个名为foreach的宏。
    • 维护修复。
  • odeint:
    • 新功能
      • 添加了如果执行了过多的ODE步骤则抛出异常的功能。
      • 添加了限制自适应方法中最大步长的可能性。
    • 一些错误修复,请参见 https://github.com/headmyshoulder/odeint-v2/issues
  • 可选:
    • 再次更改了boost::none的实现。现在它是一个具有内部链接的const对象(与任何其他标记一样)。这修复了#11203
  • 预定义:
    • 添加了SIMD硬件检测。
    • 查看历史记录了解更多详情。
  • 测试:
  • 线程 - 4.6.0: 新的实验性功能:
    • #11231 允许将延续future的析构函数行为设置为非阻塞
    • #11424 提供shared_timed_mutex作为shared_mutex的替代名称,并弃用将shared_mutex用作计时互斥锁
    • #11734 future::then(Cont)应该能够在不确定的线程上执行延续
    • #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 Windows平台小于或等于0x0502时GetLogicalProcessor不可用
    • #11090 ex_future_unwrap- ThreadSanitizer:锁顺序反转(潜在死锁)
    • #11158 使用faketime时Pthread线程死锁
    • #11174 带有谓词的boost::condition_variable::timed_wait意外唤醒,而应该无限等待
    • #11185 URL重定向不正确
    • #11192 当回调返回future时,带有执行器的boost::future<>::then()无法编译
    • #11250 由make_exceptional创建的future在其析构函数中断言失败
    • #11256 在延续函数中future<>::is_ready() == false
    • #11261 basic_thread_pool中不正确地使用了作用域线程
    • #11262 shared_state_nullary_task中不正确地使用了直接指针
    • #11263 锁已锁定
    • #11266 boost::packaged_task具有无效的变参签名
    • #11302 使用BOOST_THREAD_PATCH时boost线程无法构建。
    • #11322 sleep_for()纳秒重载在Windows上总是返回过早
    • #11329 使用声明式GetProcessHeap……失败
    • #11368 boost线程对CreateWaitableTimer的使用会唤醒PC睡眠(doh)
    • #11377 Boost条件变量总是等待系统时钟截止日期
    • #11435 future.hpp中的gcc编译器警告
    • #11555 devector.hpp假定allocator_traits_type始终存在
    • #11562 在Ubuntu 64位系统上,计算机时间向前设置后,定时器(使用steady_clock)过期
    • #11672 线程:应该使用unique_ptr,而不是auto_ptr
    • #11688 thread::try_join_until:如果系统时钟更改,避免繁忙等待
    • #11716 ::then(f)应该继承父执行器
  • UUID:
    • 添加了针对MSVC代码生成错误的解决方法,该错误可能在比较UUID时导致崩溃。
    • 添加了使用MSVC编译器开关启用AVX的检测。

新闻

Windows用户注意事项

此版本的Boost默认情况下将为Windows Vista/Windows Server 2008编译,如果编译器支持足够新的Windows SDK,否则为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负责此版本的发布。