【发布时间】:2015-01-07 11:57:16
【问题描述】:
C++中缩写函数的状态如何?环顾四周,我在 C++ 概念的working draft 中看到了一些提及。同时,GCC 之类的代码似乎没有问题
#include <iostream>
auto foo(auto x) {
std::cout << x << std::endl;
}
int main() {
foo(1);
foo(1.2);
}
现在,如果我使用 -Wpedantic 进行编译,我会收到警告:
g++ -std=c++14 -Wpedantic test08.cpp -o test08
test08.cpp:3:9: warning: ISO C++ forbids use of 'auto' in parameter declaration [-Wpedantic]
auto foo(auto x) {
^
这告诉我缩写函数并不完全符合标准。因此,它们在 C++ 标准和常见 C++ 编译器方面的现状如何?
【问题讨论】:
-
不,C++14 标准中没有这样的东西。您甚至可以在a draft of the standard 中检查自己。
-
这将由概念 TS 添加。请注意,它还允许您编写像
auto foo(std::vector<auto> const& v)这样的东西 - 毕竟模板参数推导和auto的规则是相同的 - 模初始化列表。 -
您似乎回答了自己的问题:它们不在当前标准中,但在概念提案中。
-
曾经有一个“过于本地化”的密切原因,因此这个问题应该关闭。没有可以接受的明确答案; “当前状态”可能因每次 WG21 会议而异。
-
@MSalters:我不知道这是否完全公平。基本上,我试图了解这是否只是 GCC 中的一个扩展,或者它是否计划成为 C++17 或更高版本的标准。是的,情况可能会发生变化,但我不确定目前情况如何。