Boost C++ 库

...世界上最受尊敬和设计最精良的 C++ 库项目之一。 Herb SutterAndrei AlexandrescuC++ 编码标准

版本 1.66.0

版本 1.66.0

2017年12月18日 13:58 GMT

文档

下载
平台文件SHA256 哈希值
unixboost_1_66_0.tar.bz25721818253e6a0989583192f96782c4a98eb6204965316df9f5ad75819225ca9
boost_1_66_0.tar.gzbd0df411efd9a585e5a2212275f8762079fed8842264954675a4fddc46cfcf60
windowsboost_1_66_0.7z596389389c005814ecb2a6b64c31dccd2c3e6fbc5a802b4dfada999ae5844628
boost_1_66_0.zipe1c55ebb00886c1a96528e4024be98a38b815115f62ecfe878fcf587ba715aad
* 下载链接由 C++ 联盟 的资助支持。

第三方下载

关于新的 Visual Studio 版本的说明

Visual Studio 15.5 发布时间太晚,我们无法使用它测试此版本。

新的库

  • Beast: 仅使用 C++11 和 Boost.Asio 的可移植 HTTP、WebSocket 和网络操作,来自 Vinnie Falco。
  • CallableTraits: Boost.FunctionTypes 的精神继承者,Boost.CallableTraits 是一个仅头文件的 C++11 库,用于编译时检查和操作所有“可调用”类型。来自 Barrett Adair 的 C++17 功能的额外支持。
  • Mp11: 来自 Peter Dimov 的 C++11 元编程库。

更新的库

  • Asio:
    • 实现了接口更改以反映网络 TS(N4656)。
      • 请参阅新接口的列表,以及在适用的情况下,已被取代的相应旧接口。
      • 默认情况下禁用服务模板参数和相应的类。例如,现在我们有了简单的 basic_socket<Protocol>,而不是 basic_socket<Protocol, SocketService>。可以通过定义 BOOST_ASIO_ENABLE_OLD_SERVICES 宏来启用旧接口。
    • 删除了以前弃用的函数。
    • 增加了对自定义处理程序跟踪的支持。
    • 将与反应器相关(即描述符就绪)事件添加到处理程序跟踪。
    • 添加了特殊的“并发提示”值,可用于禁用每个 io_context 基础上的锁定。
    • 为第一个 ssl::stream<> 构造函数参数启用了完美转发。
    • 增加了释放底层本机套接字所有权的能力。(在使用 I/O 完成端口后端时,需要 Windows 8.1 或更高版本。)
  • Atomic:
    • 为整数类型实现了一组实验性的扩展原子操作
      • fetch_negate, fetch_complement - 原子地将值替换为取反或二进制补码值,并返回原始值
      • opaque_<op> - 等效于 fetch_<op>,只是它不返回原始值
      • <op>_and_test - 原子地应用 <op>,如果结果为零,则返回 true注意: 这些操作的结果将在 Boost 1.67 中更改为相反。使用这些函数的代码将需要更新。
      • bit_test_and_setbit_test_and_resetbit_test_and_complement - 原子地设置、重置或补充指定的位,并返回该位的原始值
    • 根据 C++17 (P0558R1),不再提供指向非对象类型的指针的算术运算。
    • 同样根据 C++17 公开了 atomic<T>::value_typeatomic<T>::difference_type 成员 typedef(如果适用)给用户的代码。
    • 提高了与 gcc 7 的兼容性。特别是,在 x86-64 上使用 128 位操作不再需要与 libatomic(编译器提供的库)链接。
  • DateTime:
    • 该库已转换为使用 Boost.WinAPI 作为 Windows SDK 的抽象层。
    • 修复了在从日期添加或减去多年时可能导致不正确结果的整数溢出(请参见 此处)。
  • Fiber:
    • 与 CUDA 流同步
    • 与 ROCm/HIP 流同步
  • Format:
    • 改进
      • 接受新的转换说明符
        • a:设置标志 fixed | scientific (即 hexfloat)
        • b:设置标志 boolalpha
        • A:与 a 相同,加上标志 uppercase
        • F:与 f 相同,加上标志 uppercase
      • 42 接受来自 ISO C99 的新参数类型 jz (像所有其他类型一样被解析和忽略)。
      • 44 接受来自 Microsoft 的新参数类型 II32I64w(像所有其他类型一样被解析和忽略)。
      • 33 添加了一个名为 format_matrix 的开发工具,该工具会尽可能多地练习格式字符串的不同组合,并将它们记录到文件中
        • 有助于防止 boost 版本之间的回归
        • 允许与 snprintf 进行比较
    • Bugfixes
      • 36 安全地允许将 volatile 参数与 operator% 一起使用
      • 4636 提供显式钳制以允许 MSVC /RTCc 成功
      • 7477 修复与 MSVC /Za 的兼容性
      • 10324 解决常量正确的转换问题
      • 11632 修复 alt_sstream.hpp 中的 -fsanitize=undefined 问题
  • Fusion:
    • PR#149 isspace(c) 不是 VxWorks 的 Dinkum clib 中的宏,感谢 Brian Kuhl(@kuhlenough)。
    • PR#150 删除循环预处理器包含,感谢 Gregor Jasny(@gjasny)。
    • PR#151 更改 fusion::tuple 的基本类型。
    • PR#153 修复了 std::array 的编译错误。
    • PR#154 修复了 c++03 上嵌套和复制的错误。
  • Geometry:
    • 改进
      • 为地理 PointLike/AnyGeometry 添加距离。
    • Bugfixes
      • 修复了在非常复杂的情况下可能不正确的 union/intersection/difference 结果
      • 修复了 union/intersection/difference/buffer 的有效性
      • 修复了非笛卡尔坐标系的集合和关系运算。
  • Iterator:
    • next()/prior() 函数现在支持用户未指定诸如 iterator_categorydifference_type 等嵌套类型,而是专门化 std::iterator_traits 来定义这些类型的迭代器。编译器必须支持与 C++17 兼容的 std::iterator_traits 才能使其正常工作。
  • Log:
    • Bug fixes
      • 修复了 file_collector::scan_for_files 中的一个错误,该错误可能会在用户的应用程序重新启动后导致目标目录中错误命名的日志文件。
    • 有关更多详细信息,请参见更改日志
  • Math:
    • 新功能
      • 添加高斯和高斯-克朗罗德正交例程。
      • 添加双指数(tanh-sinh、exp-sinh 和 sinh-sinh)正交例程。
      • 添加切比雪夫多项式评估、根、积分、微分和插值例程。
  • Multi-index Containers:
    • 使 modifymodify_key 更加健壮,以便在修饰符抛出或回滚仿函数未正确恢复元素时删除修改后的元素(在票证 #12542 中进行了全面讨论)。这在技术上是向后不兼容的;例如,以下代码
      c.modify(c.begin(),[](auto&){throw 0;});
      
      在以前的 Boost 版本中保持容器 c 不变,而现在 c.begin() 被删除。感谢 Jon Kalb 提出这个问题。
    • 维护修复。
  • Optional:
    • 在较新的编译器上,对于标量 Toptional 现在是可平凡复制的。这使用不同的存储(只是 T 而不是 aligned_storage)。我们要求编译器支持默认函数。
    • 更改了 operator== 的实现,以消除 GCC 中 -Wmaybe-uninitialized 误报警告。
  • PolyCollection:
    • Boost.PolyCollection 已向后移植到 GCC 4.8 到 4.9 以及 Clang 3.3 到 3.6。 GCC 4.8 附带的 libstdc++-v3 版本(也可供 Clang 使用)存在缺陷,导致使用 Boost.PolyCollection 时存在以下限制
      • 未正确支持有状态分配器。
      • 分配器扩展的移动构造退化为分配器扩展的复制构造。
      • 如果在元素复制期间抛出异常,则复制构造会崩溃。
    • 维护修复。
  • Predef:
    • 改进了 Windows Universal Platform 的检测。(来自 James E. King, III)
    • 添加了对 CloudABI 与 cloudlibc 的检测。(来自 James E. King, III)
    • 各种其他错误修复。
  • Regex:
    • Bug fixes
      • 针对去模糊测试发现的众多安全问题进行了小的修复。
  • Stacktrace:
    • 现在可以在 MinGW-w64 上开箱即用。
    • 如果正确安装了 libbacktrace,则现在可以在 MinGW(没有 -w64)上运行。有关更多信息,请参阅文档中的“MinGW 特定说明”部分。
  • Thread:
    • 错误修复
      • #12323 windows - boost/thread/win32/mfc_thread_init.hpp 的 _pRawDllMainOrig 签名错误
      • #12730 windows - 静态线程库与 MSVC 2017 RC 不兼容
      • #12976 Boost 线程执行器文档错误
      • #12949 如果定义了 BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC,在不包含 boost/thread/thread.hpp 的线程上下文中使用 sleep_for 会产生不正确的行为
      • #13019 BOOST_THREAD_PROVIDES_INTERRUPTIONS 的 ABI 兼容性不完整
      • #13069 Boost 单元测试 "sync_pq_multi_thread_p_lib.exe" 在线程库中挂起
      • #13163 boost::detail::heap_new 没有可变参数的变体
      • #13226 getpagesize() 自 199506L 起已弃用
      • #132 VS 2017.4 Preview 在测试 10964 上死锁
      • #133 windows - Windows 上出现虚假的时序测试失败
      • #134 VS 2017.4 Preview 在 sync_pq_multi_thread_p_lib.exe 中死锁
      • #135 VS 2017.4 Preview test_scheduled_tp_p.exe 死锁
      • #136 VS 2017.4 Preview test_scheduler_p.exe 死锁
      • #137 VS 2017.4 Preview executor_ex.exe 死锁
      • #143 msvc-12.0 上失败
      • #145 使用 BOOST_THREAD_ATTRIBUTE_MAY_ALIAS 时出现 Clang 构建错误
    • 新的实验性功能
      • #116 [提案] 添加用于延迟 set_value/exception 的 API
  • Utility:
    • boost/next_prior.hpp 已移动到 Boost.Iterator。用户的代码无需更改。
  • Uuid:
    • 改进
      • 26 重构了 name_generator 以支持可配置的哈希提供程序概念,并根据 RFC-4122 提供可选的 MD5 哈希实现。这将使支持任何未来的标准哈希算法变得更加容易。
      • 34boost::uuids::ns 中添加了 RFC-4122 命名空间。
    • Bugfixes
      • 8630 11482 12253 解决了 string_generator 中的各种缺陷。
      • 10665 name_generator::operator() 现在是 const,与文档一致。
      • 详细头文件已移动到 detail 子目录中。用户的代码无需更改,但是如果使用旧的头文件位置,您可能会收到构建警告。
  • Variant:
    • boost::apply_visitor 现在可以完美转发可访问对象 #6971。非常感谢 Levon Tarakchyan 实现此功能。

测试编译器

Boost 的主要测试编译器是

  • Linux
    • Clang:3.0、4.0.1、5.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0、3.1、3.2、3.3、3.4、4.0.1、5.0.1
    • Clang, C++14: 3.5.0、3.6.0、3.7.1、3.8.0、3.9.1、4.0.0、4.0.1、5.0.1
    • Clang, C++17: 5.0.1
    • GCC: 4.4.7、4.5.3、4.6.3、4.7.2、5.4.0、7.2.0
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.2、4.7.3、4.8.5、4.9.4、6.4.0、7.1.0、7.2.0
    • GCC, C++14: 5.4.1、6.3.0、6.4.0、7.1.0、7.2.0、7.2.1
    • GCC, C++17: 7.2.0
    • Intel: 18.0
  • OS X
    • Clang: 9.0.0
    • Clang, C++11: 9.0.0
    • Clang, C++14: 9.0.0
    • Clang, C++1z: 9.0.0
  • Windows
    • GCC:3.4.5、4.1.2、4.2.4、4.3.3、4.4.0、4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3
    • Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0、14.1
  • Android
    • Clang:3.6、3.7、3.8
    • GCC:4.9、5.4
    • GCC, C++14: 6.2
  • FreeBSD
    • Clang:4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0
  • QNX
    • QCC, C++0x: 4.4.2
    • QCC, C++11: 4.7.3

Boost 的其他测试编译器包括

  • Linux
    • Clang:3.0、3.8.1、4.0.1、5.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0、3.1、3.2、3.3、3.4、4.0.1、5.0.1
    • Clang, C++14: 3.5.0、3.6.0、3.7.1、3.8.0、3.9.1、4.0.0、4.0.1、5.0.1
    • Clang, C++17: 5.0.1
    • GCC: 4.4.7、4.5.3、4.6.3、4.7.2、5.4.0、7.2.0
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.2、4.7.3、4.8.5、4.9.4、5.4.0、6.4.0、7.1.0、7.2.0
    • GCC, C++14: 5.4.1、6.3.0、6.4.0、7.1.0、7.2.0、7.2.1、8.0.0
    • GCC, C++17: 7.2.0
    • Intel: 18.0
  • OS X
    • Clang: 9.0.0
    • Clang, C++11: 9.0.0
    • Clang, C++14: 9.0.0
    • Clang, C++1z: 9.0.0
  • Windows
    • GCC:3.4.5、4.1.2、4.2.4、4.3.3、4.4.0、4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3、4.8.1、4.9.3
    • GCC, C++14: 5.1.0、5.2.0、5.3.0、6.1.0、6.2.0、6.3.0、6.4.0、7.1.0
    • Visual C++:7.1、8.0、9.0、10.0、11.0、12.0、14.0、14.1
  • Android
    • Clang:3.6、3.7、3.8
    • GCC:4.9、5.4
    • GCC, C++14: 6.2
  • FreeBSD
    • Clang:4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0
  • QNX
    • QCC, C++0x: 4.4.2
    • QCC, C++11: 4.7.3

致谢

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