C++11 似乎是MS VC2010 lambda表达式中的bug?

C++11 似乎是MS VC2010 lambda表达式中的bug?,c++11,lambda,C++11,Lambda,静态初始值设定项中使用的lambda表达式的行为 神奇地依赖于lambda体内初始化的局部变量 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 {

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

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);
}

在最终草案中,我看不到任何可能导致这种行为的东西(特别是因为它是无声发生的)

我在VS10中重现了这个问题,GCC 4.5.0中的行为与您预期的一样(所有变量都已初始化),因此我会说是的,这是VS10中的一个bug,您打开了bug吗


更新:我已提交并收到回复:

感谢您提交此问题。这是lambda实现中的一个bug,已经修复。该修复程序应该在VisualStudio的下一个版本中可用(可能还有VisualStudio2010SP1,尽管我不能保证)


是否存在编译警告?请注意,IDE甚至不允许您在第一个lambda函数中设置断点以进行调试,但您的回答使我确信这是一个bug。我现在要向微软汇报(或者你会做得更好?)。谢谢大家!@用户396672,好的,我已经报告了,bug ID 576999。