为什么lambda参数中不允许auto?

时间:2018-02-06 22:38:41

标签: c++ lambda auto

当我使用以下签名编写lambda定义时:

auto lambda = [&] (auto i){


};

我收到以下编译错误:

error: 'auto' not allowed in lambda parameter

当我将类型从auto更改为int时,错误消失。

我不确定为什么编译器可以推导出lambda的类型,而不是它的参数类型,在调用lambda时应该知道它?

我试图理解这种限制背后的原因。

1 个答案:

答案 0 :(得分:7)

  

我不确定为什么编译器可以推断出lambda的类型,但是   不是它的参数类型,它应该在它的时候知道   调用lambda?

它可以,但仅限于 C ++ 14

auto lambda = [&] (auto i) { };

此代码完全合法,因为 C ++ 14 并称为通用lambda

不幸的是,通用lambdas C ++ 14 之前不可用,因此,如果你需要使用它们, C ++ 14 需要支持。