带有自动参数的函数使用 GCC 编译,但不使用 Visual C++ 编译

Function with auto parameter compiles using GCC but does not compile using Visual C++

本文关键字:编译 Visual C++ GCC 参数 函数      更新时间:2023-10-16

请考虑以下代码片段:

#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;
};