Ошибка вложенной лямбда-выражения C ++ в VS2010 с захватом лямбда-параметра?

Я использую Visual Studio 2010, которая, по-видимому, имеет некоторую ошибку в работе с лямбдами, и эта вложенная лямбда-выражение, где внутренняя лямбда возвращает вторую лямбду, упакованную как std :: function (см. «Лямбда-функции высшего порядка» в MSDN ):

int x = 0;
auto lambda = [&]( int n ) 
{ 
    return std::function( 
        [&] // Note capture
        { 
            x = n; 
        } 
    ); 
};

lambda( -10 )(); // Call outer and inner lambdas

assert( -10 == x ); // Fails!

Это компилируется, но не выполняет assert. В частности, n во внутренней лямбде не инициализирован (0xCCCCCCCC), но x успешно изменен на свое значение. Если я изменю предложение захвата внутренней лямбды на «[&, n]», утверждение будет выполнено должным образом. Это ошибка VS2010, или я не понял, как работает лямбда-захват?

7
задан ronag 2 June 2011 в 19:40
поделиться