版本 1.75.0
版本 1.75.0
2020 年 12 月 11 日 19:50 GMT
平台 | 文件 | SHA256 哈希值 |
---|---|---|
unix | boost_1_75_0.tar.bz2 | 953db31e016db7bb207f11432bef7df100516eeb746843fa0486a222e3fd49cb |
boost_1_75_0.tar.gz | aeb26f80e80945e82ee93e5939baebdca47b9dee80a07d3144be1e1a6a66dd6a | |
windows | boost_1_75_0.7z | 3a8b314871646e7404886736273c053278ba71b11347f72d4751411d65d6d1a5 |
boost_1_75_0.zip | caf36d7c13b3d8ce62282a64a695113945a13b0f1796a45160726d04295f95ed |
已知问题
Boost.Operators 目前与 C++20 编译器不兼容,在某些情况下,当调用比较运算符时,可能会表现为运行时无限递归或无限循环。问题是由 C++20 中引入的新运算符重写行为引起的。作为一种解决方法,建议用户以 C++17 或更早的 C++ 标准为目标。更多详细信息请参见 #65。
新库
-
JSON: C++11 中的 JSON 解析、序列化和 DOM,来自 Vinnie Falco 和 Krystian Stasiowski。
-
快速编译,仅需 C++11
-
简单且安全的现代 API,支持分配器
-
无需 Boost 编译,定义
BOOST_JSON_STANDALONE
-
可选的仅头文件,无需链接库
-
-
LEAF: 一个用于 C++11 的轻量级错误处理库,来自 Emil Dotchevski。
-
小型单头文件格式,无依赖项。
-
为最大效率而设计(“happy”路径和“sad”路径)。
-
无动态内存分配,即使是重负载。
-
O(1) 传输任意错误类型(独立于调用堆栈深度)。
-
可以使用或不使用异常处理。
-
-
PFR: 无需宏或样板代码即可为用户定义类型进行基本反射,来自 Antony Polukhin。
更新的库
-
Asio:
-
在 Windows 上启用对 UNIX 域套接字的支持。
-
为
ip::basic_resolver
添加了执行器转换构造和赋值。 -
在多态执行器和(已弃用的)处理程序调用钩子之间添加了兼容性。
-
添加了
experimental::as_single
完成令牌适配器。 -
通过使用
_POSIX_VERSION
检测是否支持,在更多平台上添加了对MSG_NOSIGNAL
的支持。 -
添加了在 Windows 上使用 libpthread 编译的能力。
-
为 Intel C++ 编译器添加了解决方法。
-
添加了更多支持,用于检测和优化没有自定义执行器的处理程序。
-
减少了 Windows 上定时器取消的锁争用。
-
恢复了之前删除的空指针检查,因为它对性能有可衡量的影响。
-
修复了执行器概念,以测试 const 限定的
execute()
。 -
修复了在没有 RTTI 支持的构建中
any_executor
的支持。 -
修复了
thread_pool
单元测试,使其在没有 RTTI 支持的情况下也能工作。 -
修复了 C++20 协程与 Windows 上 clang 的兼容性。
-
修复了一些与 Windows Runtime 的兼容性问题。
-
修复了因添加
asio::query
引起的阴影名称警告。 -
修复了 linux 上“相等表达式的逻辑 ‘或’”警告。
-
修复了一个良性 switch fallthrough 警告。
-
添加了缺少的
push/pop_options.hpp
包含。 -
抑制了零作为空指针常量警告。
-
修复了一个逗号运算符警告。
-
更新了文档,以阐明何时select在 Windows 上使用 reactor。
-
修复了由
any_executor
比较和转换引起的潜在歧义。 -
在 MSVC 19.8 上添加了对非实验性 C++20 协程的检测。
-
修复了与 uClibc 的兼容性。
-
修复了在以旧版本 C++ 或不太符合标准的编译器为目标时,
strand<>
对 Networking TS 执行器的适配。 -
有关更多详细信息,请查阅 修订历史。
-
-
Beast:
-
此更新带来了错误修复,并支持来自 Boost.Asio 的
BOOST_ASIO_ENBALE_HANDLER_TRACKING
编译标志 -
我们很想知道您或您的公司如何使用 Beast,请考虑将条目添加到 “使用 Beast 的公司和个人” 列表中。
-
有关完整的更改列表,请参阅完整的 发行说明。
-
-
Container:
-
新的
devector
容器。 -
修复的错误/问题
-
#152 基于树的容器在移动专属类型方面存在问题。
-
#156 向量的编译错误。
-
PR#157 添加缺少的包含。
-
#159:
pmr::monotonic_buffer_resource
在大型单次分配时崩溃。 -
#162: MSVC x86 上
small_vector
按值调用崩溃。 -
#161:
polymorphic_allocator(memory_resource*)
非标准扩展引起麻烦。 -
#165: 共享库和
memory_resource
内联成员的链接错误。 -
PR#166: 修复版权标头中的编码错误。
-
#169: 在 clang11 上构建
dlmalloc_ext_2_8_6.c
时出现大量警告。
-
-
-
Endian:
-
endian_arithmetic
不再继承自endian_buffer
-
当定义了
BOOST_ENDIAN_NO_CTORS
时,未对齐的endian_buffer
和endian_arithmetic
是 C++03 POD,以启用__attribute__((packed))
的使用
-
-
Filesystem:
-
新增: 添加了
creation_time
操作,允许获取文件创建时间。(受 PR#134 启发) -
在失败的情况下,
last_write_time(p, ec)
操作的返回值已更改为std::time_t
可表示的最小值,而不是 -1。 -
在失败的情况下,
hard_link_count(p, ec)
操作的返回值已更改为static_cast<uintmax_t>(-1)
,而不是 0。 -
在 POSIX 系统上,如果路径解析为非普通文件,
file_size
现在将指示错误代码errc::function_not_supported
。以前,报告的是errc::operation_not_permitted
。 -
在 Linux 上,许多操作现在尽可能在内部使用
statx
系统调用,这可以减少从文件系统查询的信息量,并可能提高性能。statx
系统调用是在 Linux 内核 4.11 中引入的。 -
从某些
path
方法的返回类型中删除了 const 限定。在某些情况下,这可能会阻止调用站点的移动构造和移动赋值。(#160) -
在 OpenBSD 4.4 及更高版本上,使用
statvfs
系统调用来获取文件系统空间信息。(受 PR#162 启发) -
在 Windows 上,如果提供的路径未标识现有文件,
space
现在将返回错误。(#167)
-
-
GIL:
-
突破性变更: 在下一个版本中,我们将放弃对 GCC 5 的支持。我们还可能将所需的最低 C++ 版本从 C++11 更改为 C++14。
-
-
Interprocess:
-
修复的错误
-
#127: boost interprocess 1.74 和
basic_managed_shared_memory
的静态断言失败。
-
-
-
Mp11:
-
添加了
mp_pairwise_fold
(由 Barry Revzin 建议)。 -
删除了
mp_invoke
(使用mp_invoke_q
)。
-
-
Outcome:
-
公告
-
在一年和三个主要的 Boost 版本宣布此即将到来的更改之后,这是 v2.1 分支的最终版本。从 Boost 1.76 开始,v2.2 分支将成为默认分支。此分支对 Outcome v2.1 有许多重大突破性更改,详细信息请参阅文档。
-
-
增强功能
-
ADL 发现的事件钩子已被策略指定的事件钩子取代。这是由于脆弱性(如果有人更改了某些内容,钩子会悄悄地自行禁用)、编译器错误(编译器设置的差异导致错误的钩子,或者发现部分但不是全部钩子)以及最终用户难以使用它们。可以告知策略指定的事件钩子默认为 ADL 发现的钩子以实现向后兼容性:将
OUTCOME_ENABLE_LEGACY_SUPPORT_FOR
设置为小于220
以启用模拟。 -
改进
OUTCOME_GCC6_CONCEPT_BOOL
的配置。较旧的 GCC 具有基于布尔值的概念语法,而较新的 GCC 符合标准。但是,何时使用旧语法和符合标准的语法的精确逻辑尚未得到很好的理解,这导致 Outcome 无法编译,具体取决于您传递给 GCC 的选项。新逻辑始终在 GCC 8 或更旧版本上使用旧语法,否则,当且仅当 GCC 处于 C++ 20 模式或更高版本时,我们才使用符合标准的语法。这有望解决 GCC 上的极端情况构建失败问题。
-
-
错误修复
-
Boost.Outcome 现在应该可以使用定义的
BOOST_NO_EXCEPTIONS
进行编译。感谢 Boost.Exception 的维护者 Emil 为我做出的更改,Boost.Outcome 现在应该可以使用全局禁用的 C++ 异常进行编译。您将无法使用boost::exception_ptr
,因为如果全局禁用了 C++ 异常,则无法包含它。 -
#236 在协程支持中,
final_suspend()
不是noexcept
,尽管 C++ 20 标准要求如此。这已得到修复,但仅当您的编译器实现了noop_coroutine
时才有效。此外,如果noop_coroutine
可用,我们将使用效率更高的协程句柄返回await_suspend()
变体,这应显著提高代码生成和上下文切换性能。
-
-
-
Polygon:
-
针对
event_comparison_type
、vertex_equality_predicate_type
和voronoi_predicates
的 C++20 修复。(Glen Fernandes)
-
-
Preprocessor:
-
当可变参数数据在支持
__VA_OPT__
的 C++20 模式下为空时,可变参数大小已更正为 0。这也意味着在此 C++20 模式下,现在可以与空数组、列表和可变参数数据进行相互转换。最终用户可以阅读“可变参数宏”主题的“C++20 对可变参数宏的支持”部分,以获取有关库中空可变参数数据的更多信息。 -
已添加宏
BOOST_PP_IS_STANDARD()
,用于识别当前使用的预处理器是否为符合 C++ 标准的预处理器。一些预处理器通常可以与库正确配合使用,但需要各种内部解决方法,包括当前默认的 VC++ 预处理器,这些预处理器不被视为符合 C++ 标准的预处理器。但是,大多数预处理器,包括 gcc、clang 以及 VS2019 中新的但当前非默认的 VC++ 预处理器,都是符合 C++ 标准的预处理器。 -
对于符合 C++ 标准的预处理器,现在可以将
config/limits.hpp
中定义的许多限制更改为 TU 的更高数量。最终用户应阅读“限制”主题,以了解如何以及可以更改哪些限制。 -
对于符合 C++ 标准的预处理器,为了允许 FOR 和 WHILE 迭代的最大次数,用户定义的宏中的起始 'r' 和 'd' 迭代编号从 1 开始,而不是像以前的版本中那样从 2 开始。如果在用户定义的宏中使用了这些迭代编号,这可能会是一个突破性更改(它们可能不会被使用),但此更改对于修复处理最大数字的数值/逻辑运算时的一些神秘错误以及允许用户定义的宏被调用正确的最大次数是必要的。对于不符合 C++ 标准的预处理器,未进行此更改,因为那些不符合 C++ 标准的预处理器通常具有限制,这些限制不允许运行最大数量的循环结构,并且认为不对那些更脆弱的预处理器引入可能的突破性更改会更好。还认为,除了修复一些神秘的预处理器错误并提供用户定义宏调用的可能最大次数之外,可以进行此更改,因为从未记录起始 'r' 和 'd' 迭代编号实际上是什么,而只是这些编号在每次迭代时都会递增。
-
该库已升级为假定任何与该库一起使用的编译器都支持可变参数宏。表面上,这意味着该库现在是一个 C++11 及更高版本的库,但大多数主要编译器,包括 gcc、clang 和 VC++,也支持 C++98/C++03 模式下的可变参数宏,只要在使用这些编译器之一时,不启用对 C++98/C++03 的严格合规性。
-
-
Rational:
-
修复 Rational 运算符,使其在新 C++20
operator==
重写规则下不会中断。(Glen Fernandes)
-
-
Signals2:
-
正确的 C++ 分配器模型支持,以修复 C++20 标准模式下的编译。(Glen Fernandes)
-
-
System:
-
平台特定的头文件
windows_error.hpp
、linux_error.hpp
和cygwin_error.hpp
发出弃用消息,并计划删除。 -
generic_category()
和system_category()
的旧名称发出弃用消息,并计划删除。 -
error_condition::failed
已弃用,并计划删除。error_condition
的operator bool()
已恢复为其旧含义value() != 0
。这样做是为了与std::error_condition
兼容,因为下一个版本预计将进一步提高与<system_error>
的互操作性。请注意,这不影响error_code::failed
,它仍然有效。 -
接受缓冲区的
error_condition::message
重载已弃用,并计划删除,原因相同。请注意,这不影响error_code::message
。
-
-
uBLAS:
-
正确的 C++ 分配器模型支持,以修复 C++20 标准模式下的编译。(Glen Fernandes 和 Conrad Poelman)
-
-
VMD:
-
VMD 数字解析已升级,以支持最终用户更改预处理器库中数字限制的能力。
-
已添加宏
BOOST_VMD_IS_GENERAL_IDENTIFIER
,以支持解析表示与 VMD 标识符语法匹配的预处理器标记的输入,而无需将标识符注册为特定标识符。
-
测试的编译器
Boost 的主要测试编译器是
-
Linux
-
Clang: 3.0, 4.0.1, 6.0.1
-
Clang, C++0x: 3.0
-
Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0
-
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.2, 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0
-
Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0
-
GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1
-
GCC, C++0x: 4.4.7
-
GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
-
GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1
-
GCC, C++17: 7.3.0, 8.0.1
-
Intel, C++14: 18.0
-
-
OS X
-
Apple Clang: 9.0.0, 9.1.0, 10.0.0, 11.0.0
-
Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0, 11.0.0
-
Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0, 11.0.0
-
Apple Clang, C++17: 9.1.0, 10.0.0, 11.0.0
-
Apple Clang, C++1z: 9.0.0
-
Apple Clang, C++2a: 10.0.0, 11.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
-
GCC, C++17: 7.1.0, 7.2.0, 7.3.0
-
Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
-
-
FreeBSD
-
Clang: 4.0.0
-
Clang, C++11: 4.0.0
-
Clang, C++14: 4.0.0
-
Clang, C++1z: 4.0.0
-
Boost 的其他测试编译器包括
-
Linux
-
Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1
-
Clang, C++0x: 3.0
-
Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
-
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.2, 6.0.1, 7.0.0, 8.0.0
-
Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
-
GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1
-
GCC, C++0x: 4.4.7
-
GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
-
GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0
-
GCC, C++17: 7.3.0, 8.0.1
-
Intel, C++14: 18.0
-
-
OS X
-
Apple Clang: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
-
Apple Clang, C++17: 9.1.0, 10.0.0
-
Apple Clang, C++1z: 9.0.0
-
Apple Clang, C++2a: 10.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
-
GCC, C++17: 7.1.0, 7.2.0, 7.3.0
-
Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
-
-
FreeBSD
-
Clang: 4.0.0
-
Clang, C++11: 4.0.0
-
Clang, C++14: 4.0.0
-
Clang, C++1z: 4.0.0
-
鸣谢
Marshall Clow、Michael Caisse 和 Glen Fernandes 管理了此版本。