lambda有不同的类型吗?

时间:2016-01-04 17:10:52

标签: c++

每个lambda应该有一个唯一的未知类型..是否保证同一范围内的两个lambda具有不同的类型?

int main() {
   auto l1 = [](){};
   auto l2 = [](){};   
  static_assert(std::is_same<decltype(l1), decltype(l2)>::value == false, "Types cannot be equal!");
}

这有效,但我想知道是否保证断言永远不会发射。

1 个答案:

答案 0 :(得分:12)

是的,每个lambda表达式都会产生一个唯一的类型([expr.prim.lambda] / 3):

  

lambda-expression的类型(也是闭包对象的类型)是一个唯一的,未命名的nonunion类类型 - 称为闭包类型 - 其属性如下所述。

[强调补充]