Visual Studio 2022设置/std:c++20仍不支持C++20特性问题
问题解决:C++20 auto函数参数编译错误
问题原因
你代码里的auto f(auto& x, auto& y)是C++20引入的函数模板简写语法,等价于:
template<typename T, typename U> auto f(T& x, U& y) { std::cout << x << y << "\n"; }
报错说明你的项目实际未正确启用C++20标准,或Visual Studio配置存在遗漏。
解决步骤
1. 确认配置覆盖所有构建变体
- 右键项目选择「属性」,打开项目配置面板
- 进入
配置属性 -> C/C++ -> 语言,确保所有配置(Debug/Release)和所有平台(x86/x64等)的C++语言标准都设置为ISO C++20标准 (/std:c++20) - 点击「应用」后重新编译
2. 启用完整C++20特性支持(针对VS2022早期版本)
部分VS2022早期版本需额外启用/Zc:auto选项以支持auto模板参数:
- 在项目属性的
配置属性 -> C/C++ -> 命令行中,将/Zc:auto添加到「附加选项」 - 点击「应用」后重新编译
3. 替代方案:显式编写模板
若上述配置调整后仍有问题,可使用C++11及以上兼容的显式模板写法替代简写,功能完全一致:
#include<iostream> #include<ranges> #include<string> template<typename T, typename U> auto f(T& x, U& y) { std::cout << x << y << "\n"; } struct s { int x; std::string y; }; int main() { std::cout << "Hello World" << "\n"; }
验证
修改配置或代码后重新编译:
- 简写语法编译通过,说明C++20配置已生效
- 显式模板写法可在C++11及以上标准环境正常编译
内容的提问来源于stack exchange,提问作者Robert Shepherd
相关产品推荐
相关产品推荐

