请注意以下代码段:
#include <iostream>
void print(auto arg) {
std::cout << arg << std::endl;
}
int main() {
print("Hi");
return 0;
}
正如您可以在这里看到的(https://godbolt.org/z/2gsrxs),使用GCC,代码可以很好地编译和运行。
正如您使用Visual C++在这里(https://godbolt.org/z/rtr6w9)看到的那样,代码不会编译,并导致错误消息:
。
在我看来,这个功能还没有在Visual C++中实现过吗? 此外,我无法在以下列表中找到编译器功能:https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=VS-2019。 所以我不确定微软开发人员是否在他们的待办事项列表上有这个功能?
自动接收功能是C++20的一个功能。 必须使用/std:latest
启用它。 但是,MSVC此时仅对此语法有部分支持,因此并非所有使用此特性的声明都将工作。
作为扩展,GCC从早期的C++14天起就支持函数参数中的auto。
阅读p1141r2:约束声明的另一种方法,您可以阅读更多关于这个C++20特性的信息