Подтвердить что ты не робот

Проблема с вложенным лямбда-захватом

Я скомпилировал это с помощью компилятора Visual Studio 2010 и у него возникли ошибки при компиляции на вложенной лямбда, захватывающей переменные, захваченные уже первой лямбдой:

    Functor& fn, const WorkData& workData

    group.run([&fn, workData](){
    async_future<ProcessorResult> future([&fn, workData]() -> ProcessorResult{
    ProcessorResult result = fn.Process(workData);

    return result;
    });
});

Я получаю:

**error C3480**: '`anonymous-namespace'::<lambda3>::fn': a lambda capture variable must be from an enclosing function scope

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

Если я создаю локальные копии, он работает:

    group.run([&fn, workData](){
    Functor& fnlocal = fn;
    WorkData workDatalocal = workData;

    async_future<ProcessorResult> future([&fnlocal, workDatalocal]() -> ProcessorResult{
    ProcessorResult result = fnlocal.Process(workDatalocal);

    return result;
    });
});

Согласуется ли это поведение? Мне всегда нужно делать копии захваченных переменных, чтобы фиксировать одни и те же переменные на вложенной лямбда?

4b9b3361

Ответ 2

Это не соответствует окончательному проекту, но соответствует его формулировке в то время, когда они были реализованы, т.е. на самом деле это не дефект VS, но он не является стандартным. Следующая версия, известная как vNext, будет обновлена ​​для использования последней редакции.