【发布时间】:2015-08-20 08:14:48
【问题描述】:
使用带有 std=c++1y 标志的 Clang 3.5、3.6 或 3.7,以下代码无法编译:
#include <iostream>
auto foo(auto bar) { return bar; }
int main() {
std::cout << foo(5.0f) << std::endl;
}
给出的错误是:
错误:函数原型中不允许“自动”
我在使用 g++ 4.9 时没有错误。 产生此错误是因为 Clang 尚未实现此功能,还是因为我不允许这样做而 GCC 以某种方式允许它?
【问题讨论】:
-
我认为你不应该这样做,因为你使用它超出了范围。
-
auto普通(非 lambda)函数的函数参数是概念 TS 的扩展。它们不是 C++14 的一部分,而这正是 C++1y 的组成部分。 -
顺便说一句,有一个(n 非官方的?)clang branch 支持它。可以在std-discussion mailing list 上找到一些讨论。不过,我不知道那个分支的当前状态是什么。
-
BTW C++14 已发布,因此您应该使用
-std=c++14(如果您的编译器没有该开关,请升级)。下一个版本暂定名为c++1z。 -
gcc 4.9.x 可能是使用概念构建的,这可能就是您看到它的原因。