我有以下代码:
int main() {
auto f = [] {
if (1) return [] { return 1; };
else return [] { return 2; };
};
return f()();
}
Run Code Online (Sandbox Code Playgroud)
使用GCC 5.2.1引发以下编译器错误:
error: inconsistent types ‘main()::<lambda()>::<lambda()>’ and
‘main()::<lambda()>::<lambda()>’ deduced for lambda
return type else return [] { return 2; };
Run Code Online (Sandbox Code Playgroud)
现在显然这两种类型看起来是一样的,所以我不确定这是否是带有误导性错误消息的GCC,或者它是否真的是一个错误.根据我的知识,这应该编译; lambda返回类型应推断为std::function<int()>.有趣的是,如果我预先声明lambda返回并返回相同的变量两次,它就可以工作.
任何人都可以对发生的事情有所了解吗?我发现了类似的问题,很多都归因于GCC漏洞,但这看起来不同.