小编Ale*_*lex的帖子

为什么我得到一个带有多个返回路径的lambda返回lambda的类型推导错误?

我有以下代码:

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漏洞,但这看起来不同.

c++ lambda return-type return-type-deduction c++14

8
推荐指数
1
解决办法
1473
查看次数

标签 统计

c++ ×1

c++14 ×1

lambda ×1

return-type ×1

return-type-deduction ×1