版本 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: 来自 Vinnie Falco 和 Krystian Stasiowski 的 C++11 中的 JSON 解析、序列化和 DOM。
-
仅需 C++11 的快速编译
-
具有分配器支持的简单且安全的现代 API
-
不使用 Boost 进行编译,定义
BOOST_JSON_STANDALONE
-
可选的仅头文件,无需链接到库
-
-
LEAF: 来自 Emil Dotchevski 的 C++11 轻量级错误处理库。
-
小型单头文件格式,无依赖项。
-
专为最大效率而设计(“快乐”路径和“悲伤”路径)。
-
即使使用重负载,也无需动态内存分配。
-
任意错误类型的 O(1) 传输(与调用堆栈深度无关)。
-
可以与或不使用异常处理一起使用。
-
-
PFR: 来自 Antony Polukhin 的,无需宏或样板代码即可为用户定义类型进行基本反射。
更新的库
-
Asio:
-
启用对 Windows 上 UNIX 域套接字的支持。
-
向
ip::basic_resolver
添加了执行器转换构造和赋值。 -
添加了多态执行器和(已弃用的)处理程序调用钩子之间的兼容性。
-
添加了
experimental::as_single
完成令牌适配器。 -
通过使用
_POSIX_VERSION
检测是否支持,在更多平台上添加了对MSG_NOSIGNAL
的支持。 -
添加了在 Windows 上使用 libpthread 进行编译的能力。
-
添加了对 Intel C++ 编译器的解决方法。
-
添加了更多对检测和优化没有自定义执行器的处理程序的支持。
-
减少了 Windows 上定时器取消的锁争用。
-
恢复了先前删除的空指针检查,因为它对性能产生了可衡量的影响。
-
修复了
executor
概念以测试 const 限定的execute()
。 -
修复了不支持 RTTI 的构建的
any_executor
支持。 -
修复了
thread_pool
单元测试以在不支持 RTTI 的情况下工作。 -
修复了 Windows 上 clang 的 C++20 协程兼容性。
-
修复了与 Windows Runtime 的一些兼容性问题。
-
修复了由于添加
asio::query
引起的阴影名称警告。 -
修复了 linux 上“相等表达式的逻辑‘或’”警告。
-
修复了良性的开关失败警告。
-
添加了缺失的
push/pop_options.hpp
包含。 -
禁止了零作为空指针常量警告。
-
修复了逗号运算符警告。
-
更新了文档,以阐明何时select在 Windows 上使用反应器。
-
修复了由
any_executor
比较和转换引起的潜在歧义。 -
添加了对 MSVC 19.8 上非实验性 C++20 协程的检测。
-
修复了与 uClibc 的兼容性。
-
修复了当目标为较旧的 C++ 版本或不那么兼容的编译器时,Networking TS 执行器的
strand<>
适配。 -
有关更多详细信息,请查阅 修订历史。
-
-
Beast:
-
此更新带来了错误修复,并支持来自 Boost.Asio 的
BOOST_ASIO_ENBALE_HANDLER_TRACKING
编译标志 -
我们很想知道您或您的公司如何使用 Beast,请考虑将条目添加到 使用 Beast 的公司和个人 列表中。
-
有关完整的更改列表,请参阅完整的 发行说明。
-
-
容器:
-
新的
devector
容器。 -
修复的错误/问题
-
#152 基于树的容器在移动专用类型时遇到问题。
-
#156 使用向量编译错误。
-
PR#157 添加缺失的包含。
-
#159:pmr::monotonic_buffer_resource 在大型单次分配时崩溃。
-
#160:uses_allocator 的用法需要 remove_cvref_t。
-
#162:MSVC x86 上的 small_vector 按值调用崩溃。
-
#161:polymorphic_allocator(memory_resource*) 非标准扩展导致麻烦。
-
PR#163:带有选项的 small_vector 的 container_rebind。
-
#165:共享库和 memory_resource 内联成员的链接错误。
-
PR#166:修复版权标题中的编码错误。
-
PR#167:错误:'msg' 的地址在 GCC 4.4 中始终评估为 'true' 警告。
-
#169:在 clang11 上构建 dlmalloc_ext_2_8_6.c 时出现大量警告。
-
-
-
字节序:
-
endian_arithmetic
不再继承自endian_buffer
-
当定义
BOOST_ENDIAN_NO_CTORS
时,未对齐的endian_buffer
和endian_arithmetic
是 C++03 POD,以允许使用__attribute__((packed))
-
-
文件系统:
-
新:添加了
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 中引入的。 -
在 OpenBSD 4.4 及更高版本上,使用
statvfs
系统调用来获取文件系统空间信息。(灵感来自 PR#162) -
在 Windows 上,如果提供的路径未标识现有文件,则
space
现在会返回错误。(#167)
-
-
GIL:
-
重大变化:在下一个版本中,我们将放弃对 GCC 5 的支持。我们还可能将所需的最低 C++ 版本从 C++11 更改为 C++14。
-
-
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 上的特殊构建失败问题。
-
-
Bug 修复
-
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 中定义的许多限制更改为更大的值。最终用户应阅读“限制”主题以了解如何以及可以更改哪些限制。
-
为了允许最大数量的 FOR 和 WHILE 迭代,对于符合 C++ 标准的预处理器,用户定义宏中的起始 '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 管理了此版本。