当前位置: 首页 > 科技观察

C++17最新进展报告

时间:2023-03-14 10:25:51 科技观察

C++标准委员会近日在夏威夷科纳召开了会议。大家可能关心***的进展,但是按照以往的情况,有些文件要等很久才会公开。会议期间,大家忙着修改自己的文件。会后,大会将收集修改后的文件,并在数周内发布。但这一次,委员会修改了他们的系统,使得获取文件的早期版本变得非常简单,而且这些电子邮件是公开的。我从官方来源收集和整理了这些信息,没有任何主观评论。如果你想了解本次会议的主要内容,请阅读以下内容(关于C++17库的大部分内容我已经知道,但要全部写出来还需要一些时间)C++17Core库文件P0001R1放弃register关键字P0002R1bool类型不再支持++运算符P0012R1异常成为类型系统的一部分,第五版P0061R1支持__has_includeP0134R0引入非静态成员变量的拷贝构造函数//不确定P0136R1重写Inheritanceconstructor(coreissue1941etal)P0160R0Deletethedefaultvalueoftheunaryoperator//WordingforremovingdefaultsforunaryfoldsC++17库相关文档P0004R1放弃过时的iostreams别名P0006R0采用标准库规范TypetraitvariabletemplateP0092R1优化P0007R1ConstantView:::as_const的辅助函数模板P0156R0变量lock_guard(修订版3)P0074R0使std::owner_less更灵活P0013R1Logicaloperatortypetrait(revision1)LibrarybasespecificationVersion2documentN4531replacesstd::rand,version3P0013R1Logicaloperatortypetraits(revision1)[C++17voted]这些文档将应用于N4529草案,并且然后对拟议的技术规范草案进行投票。并发规范P0159R0将作为并发技术规范发布,届时可能会稍作修改。并行规范v2草案N4505和P0155R0的“任务块R5”负责这项工作。网络规范草案P0112R1负责这项工作。范围规范草案P0021R0负责这项工作。核心话题1274.常见的非终结符表达式和内联初始化列表1391.非推导模板参数到参数类型的转换1722.lambda函数指针转换函数应该也不例外吗?1847.部分排序时声明一致性1863.抛出对象的类型应支持std::current_exception()1949.“sequencedafter”而不是“sequencedbefore”1975.允许声明异常类型1981.隐式和显式上下文转换1990.decl-specifier-seq引起的歧义2000.#include以外的头文件名2004.常量表达式中有变量成员的变量2006.cv-qualifiedvoid类型2015.ODR-虚函数的使用20162019.成员引用的遗漏存储时间描述2024.依赖类型和解包参数包2026.零初始化和constexpr2027.不清楚需要指定多个alignas2031.&&的不兼容性2052.模板参数推导与重载运算符2075.将短初始化列表传递给数组引用参数2101.类型和值依赖的描述不正确2120.数组作为标准布局类的第一个非静态成员变量库主题1169.num_get与strto*不完全兼容2072.缓冲区容量没有明确定义2101.某些类型转换可能会产生意想不到的类型2111.处理异常时可以调用那些删除的句柄吗?2119.扩展整型缺少散列函数。2127.使用raw_storage_iterator移动构造。construct()不够清楚2219.INVOKE-ingapointerwithreference_wrapperasobjectexpression2224.Inactiveobjectstateproblem2234.assert()shouldallowuseinconstantexpression2244.关于basic_istream::seekg问题2250.跟进库问题22072259.17.6.5.5关于成员函数的规则2273.regex_match的歧义2336.is_trivially_constructible/is_trivially_assignable的结果总是false2353.Std::next限制太多2367.pair和tuple在没有参数时与is_constructible不兼容2380.是否应该提供long::abs(long)和longlong::abs(longlong)?2384.分配器的释放函数需要更好的规范2385.function::assign分配器参数没有意义2435.reference_wrapper::operator()标志应该被移除2447.分配器和Volatile限定值类型2462.std::ios_base::failure结束了-指定2466.allocator_traits::max_size()默认性能错误2469.map的[]运算符和unordered_map规则错误2473.basic_filebuf兼容C文件2476.scoped_allocator_adaptor不可赋值2477.std::vector::erase()和Inconsistencystd::deque::erase()2483.throw_with_nested()应使用is_final2484.rethrow_if_nested()不可实现2485.常量元组&&应重载get()2486.mem_fn()应提供向前兼容性2487.bind()应不是cv重载,而是const重载2489。mem_fn()应该是noexcept2492。阐明对comp2495的需求。没有异常安全元素这样的东西库基础TSv2问题2494。[基金。ts.v2]ostream_joiner应该是noexceptfor2500。[fund.ts.v2]fundts.memory.smartptr.shared.obs/6应该适用于cv-unqualifiedvoid2515。[fund.ts.v2]observer_ptr的确定性运算符不能匹配任何配置文件2517.[fund.ts.v2]两个propagate_const赋值运算符返回不正确的类型2526.[fund.ts]experimental::function::swap条件不正确Moreinfo以上只是投票部分记录每次开会都会涉及到很多工作,并不是所有的工作都会在文档中体现出来,比如没有关于模块的热烈讨论文档。虽然我几乎所有的时间都在图书馆工作组度过,但我还是不能事事跟风。对于文档的最终版本,我将在Reddit上分享每个模块的进度。本文作者可以回答大部分关于图书馆的问题,但回复可能会稍有延迟。可以肯定的是,库的可用性增加了。一切看起来都像小猫一样温顺可爱,但如果你看看超载的收藏品,这些暧昧就是一场灾难。LWG2451是标准库定义的一个很好的例子,optionalopt_str="meow";尚未实施。基本规格没有问题,但可选的止船器不符合国际标准。在这次会议上,LWG意识到一些问题影响了变体,而且问题会涉及到基本规范。当然,会议会解决这些问题,你不必经历痛苦。