似乎是MS VC2010 lambda表达式中的错误?

时间:2010-07-20 10:21:26

标签: c++11 lambda

静态初始值设定项中使用的lambda表达式的行为 神奇地依赖于在lambda body中初始化的局部变量

int static_1 = 
    [=]() -> int {
      int k_=7;// if this statement presents, the lambda doesn't work (static_1 remains uninitialized)
      return 5;
} ();

int static_2= 
    [=]() -> int {
      //Ok  without variable initializer int k_=7;
      return 5;  
}();

int main() {
  int local= 
      [=]() -> int {
        int k_=7; // Ok with variable initializer  when lambda used in local function context
        return 5;
  } ();

  printf("\n static_1= %d \n static_2= %d \n local= %d", static_1,static_2,local);
}

1 个答案:

答案 0 :(得分:2)

我在最终草案中看不到会导致这种行为的任何事情(特别是因为它是静默发生的)。

我在VS10中重现了这个问题,并且GCC 4.5.0中的行为正如您所期望的那样(所有变量都已初始化)所以我会说是的,这是VS10中的一个错误,你有没有打开错误?


更新:我已提交this bug并得到回复:

  

感谢您提交此问题。这是我们的lambda实现中的一个错误,并已得到修复。该修补程序应该可以在Visual Studio的下一个版本中使用(可能还有Visual Studio 2010 SP1,但我无法保证)。