带有自动参数的函数使用 GCC 编译,但不使用 Visual C++ 编译
Function with auto parameter compiles using GCC but does not compile using Visual C++
请考虑以下代码片段:
#include <iostream>
void print(auto arg) {
std::cout << arg << std::endl;
}
int main() {
print("Hi");
return 0;
}
正如你在这里看到的(https://godbolt.org/z/2GSrXs(使用GCC代码编译和运行良好。
正如您在此处看到的 (https://godbolt.org/z/rtR6w9( 使用 Visual C++ 代码无法编译并导致错误消息:
<source>(3): error C3533: a parameter cannot have a type that contains 'auto'
.
在我看来,此功能尚未在视觉C++中实现? 此外,我无法在以下列表中找到编译器功能: https://learn.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=vs-2019。所以我不确定Microsoft开发人员的待办事项列表中是否有该功能?
函数接收自动是一个C++20功能。必须使用/std:latest
启用它。但是,MSVC 目前仅部分支持此语法,因此并非所有使用此功能的声明都有效。
GCC 从早期C++14 天开始就支持函数参数中的 auto,作为扩展。
您可以阅读有关此 C++20 功能阅读P1141R2的更多信息:约束声明的另一种方法
保留在 C++14 标准中,您可以使用以下 lambda 代替函数:
auto print = [](auto arg) {
std::cout << arg << std::endl;
};
相关文章:
- 编译并运行后,输出未出现在 Visual Studio 代码中
- 第三方 API 中的编译错误 - Visual Studio
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 如何在 CMake 中添加预编译标头用于 Visual Studio 生成器
- 如何使用msbuild和设置C++17命令行编译Visual Studio项目?
- 如何使用 GLFW 预编译的二进制文件编译 Visual Studio 2019 发布版本
- 我想使用 CMake 生成和编译 Visual Studio projet,我需要从构建中排除单元测试文件。有没有办法做到这一点?
- 如何在 Linux 上高效地编译 Visual Studio c++ 项目
- 如何通过Windows上的命令行编译Visual Studio的C 项目
- 在不安装 Visual Studio 的情况下编译 Visual Studio 项目
- 在LNK2038中编译Visual Studio 2010到2012 RC的MFC应用程序
- 在使用 Xbuild 编译 Visual C++ 项目时定义目标
- 在Qt Creator中编译Visual Studio 2010项目
- 如何从 C# 以编程方式编译 Visual C++ 项目
- 编译Visual c++ DLL时出现奇怪错误
- 从命令行编译Visual c++
- 如何从命令提示窗口构建和编译visual studio c++代码
- 在amd64模式下编译(visual studio 2010)
- 使用CMake编译Visual Studio 2012的SFML
- IncrediBuild在一个线程中编译Visual Studio 2010/2012解决方案的一些项目