这是什么 新建
我们有 继续在MSVC工具集中实现C++ 20, 值得注意的进展 制造于 VS(Visual Studio) 2019 v16.7和2019 v16.8。这篇博文列出了实现的特性 自从 这个 VS 2019到16.1到16.6中的C++ 20特征和修复 博客文章。
这篇博文将特别关注 MSVC公司 编译程序 (cl.exe) . STL的一致性进度的变更日志在 标准库更改日志 在 微软STL GitHub 回购 .
所涵盖的一些功能 已经在 发布的公告 一 t型 CppCon公司 2020 与VS2019 v16.8 Preview 3版本相关 .
作为提醒 / std:c ++17和/ std:c ++最新 编译器选项是使用C++ 17和C++ 20特性所必需的 ,分别 .
VS 2019 v16.7版本
C++ 20语言特征支持
- 实施 P1009R2型 新表达式中的数组大小推断
- 实施 P0722R3型 高效 大小 删除 对于可变大小的类
- 实施 第1094R2页 嵌套内联命名空间
- 实施 P1331R2页 允许在 常量表达式 上下文
- 实施 P1816R0页 骨料CTAD
- 实施 P0388R4型 允许转换到未知绑定的数组
- 实施 第1452R2页 关于返回类型需求的非统一语义
- 实施 P1152R4页 贬损
- 实施 P1814R0页 别名模板的CTAD
- 实施 P1972R0页 US105检查非模板约束的满足性…
- 实施 P1980R0型 CA096:非从属requires子句的声明匹配
- 实施 P0528R3型 A 原子比较与交换 衬垫 位
- 实施 P1358R0页 T 类型完整性和派生到基指针 转换
- 实施 P0466R5型 L 布局兼容性 指针互换性特征
- 实施 P2107R0型 US064 coroutine的复制语义 参数
- 实施 P2107R0型 美国052 中未执行的返回语句 协同程序
- 实施 P2103R0型 允许“导入”内部链接规范[ dcl.link链接 ]
- 实施 P2085R0型 一致的 违约 比较
- 实现了CWG 2280,它匹配了一个普通的释放函数和布局 新的
- 实现了cwg2382非分配布局的阵列分配开销 新的
- 实施 CWG公司 2441内联函数 参数
- 实施CWG 2282 与不匹配的对齐/非过度对齐分配/取消分配函数的一致性
- 应该考虑实现从T*到bool的转换 缩小
与2019年相比 16.8
C++ 20语言特征支持
- 实施 P0315R4型 在未赋值的上下文中允许lambda
- 实施 P0960R3型 允许从带圆括号的值列表初始化聚合
- 实施 P0848R3型 条件平凡特殊成员函数
- 实施 P1811R0页 放宽再出口限制
- 实施 第1766R1页 减轻小模块的弊病
C++ 20的两个主要特点, 模块 和 协同程序 ,现在是MSVC工具集中的完整特性,现在由/ std:c ++最新的编译器开关。
严格一致性模式(/permissive-)和/ std:c ++最新
作为模块支持的先决条件,当/ std:c ++指定了最新版本 . 看到了吗 /放任的- 文档 关于 在“/permissive-”下编译代码。
对于以前在下编译的代码/ std:c ++最新并且需要非一致性编译器行为,可以指定“/permissive”来关闭编译器中的严格一致性模式,并且必须在/ std:c ++命令行参数列表中最新的。
但是,如果模块用法无效,则指定“/permissive”将导致错误 遇到 :
错误C1214:模块与通过“[option]”请求的非标准行为冲突
其中[ 选项 ]它们是:
- `/ Zc:两相 – ` : 两阶段名称查找(`/ Zc:两相 `)是 必修的 对于C++ 20个模块,由“/允许”暗示 . 另请参见[/ Zc:两相 [文件]( https://docs.microsoft.com/en-us/cpp/build/reference/zc-twophase?view=vs-2019).
- `/ Zc:隐藏的朋友 – ` : S 标准隐藏好友名称查找规则 是 必修的 对于C++ 20模块,由“/允许”-‘暗示。
- `/ 预处理器 – ` : 共形预处理器的使用(/ 预处理器 )是 必修的 对于C++ 20头单元的使用和创建 . 命名模块不需要这样做 选项 . 另请参见/ 预处理器 [文件]( https://docs.microsoft.com/en-us/cpp/build/reference/zc-preprocessor?view=vs-2019 )
更多信息
对于VisualStudio更改(超出C++工具集)和下载链接,请参见 VS发行说明 和 VS预览发行说明 . 你可以通过 开发者社区 ,还可以通过 microsoft/STL GitHub问题 .