похоже ошибка в лямбда-выражениях MS VC2010? - PullRequest
4 голосов
/ 20 июля 2010

Поведение лямбда-выражения, используемого в статических инициализаторах магически зависит от локальных переменных, инициализированных внутри лямбда-тела

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 Ответ

2 голосов
/ 21 июля 2010

Я не вижу в окончательном варианте ничего такого, что могло бы привести к такому поведению (тем более что это происходит тихо).

Я воспроизвел проблему в VS10, и поведение в GCC 4.5.0 такое, как вы ожидаете (все переменные инициализированы), поэтому я бы сказал, да, это ошибка в VS10, вы открыли ошибку? *


Обновление: Я отправил эту ошибку и получил ответ:

Спасибо за отправку этой проблемы. Эта ошибка в нашей лямбда-реализации была исправлена. Исправление должно быть доступно в следующей версии Visual Studio (и, возможно, Visual Studio 2010 SP1, хотя я не могу этого гарантировать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...