【发布时间】:2014-10-30 20:49:15
【问题描述】:
今天我找到了这段代码
#include <cstdio>
auto terminal = [](auto term)
{
return [=] (auto func)
{
return terminal(func(term));
};
};
令人惊讶的是,GCC accepts it。 Clang 拒绝它,因为它在自己的初始化程序中使用 terminal 并声明为 auto。
我期待clang给出的错误,但它实际上是不正确的吗?还是必须接受代码?
【问题讨论】:
-
这似乎是在利用多态 lambda,这是 C++14 中的一个特性。检查您的 gcc 版本和/或 Clang 版本是否支持多态 lambda。
-
@YoungJohn,如果 GCC 版本可以编译代码,它显然会这样做。我可以自信地说,Coliru 上的 Clang 版本既支持多态 lambda,又不编译代码。
-
@YoungJohn 感谢您的建议。我检查了 GCC,它支持多态 lambda(因为它接受并执行我的 sn-p)。叮当seems to support them too.
-
所以 GCC 似乎只有在我将函数更改为在声明语句和 return 语句中实际调用 both 时才会抱怨(并在
main中注释掉调用因为那时它不再兼容)。