提问者:小点点

带有auto参数的函数使用GCC编译,但不使用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,代码可以很好地编译和运行。

正如您使用Visual C++在这里(https://godbolt.org/z/rtr6w9)看到的那样,代码不会编译,并导致错误消息:

(3):错误C3533:参数的类型不能包含“auto”

在我看来,这个功能还没有在Visual C++中实现过吗? 此外,我无法在以下列表中找到编译器功能:https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=VS-2019。 所以我不确定微软开发人员是否在他们的待办事项列表上有这个功能?


共1个答案

匿名用户

自动接收功能是C++20的一个功能。 必须使用/std:latest启用它。 但是,MSVC此时仅对此语法有部分支持,因此并非所有使用此特性的声明都将工作。

作为扩展,GCC从早期的C++14天起就支持函数参数中的auto。

阅读p1141r2:约束声明的另一种方法,您可以阅读更多关于这个C++20特性的信息

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(带有|auto|参数|函数|gcc|编译|但不|visual|c++|编译)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?