嵌套的Lambda捕获问题

Ghi*_*ita 12 c++ lambda visual-studio-2010 visual-studio c++11

我使用Visual Studio 2010编译器编译了它,它在嵌套的lambda上有编译器错误问题,捕获第一个lambda已捕获的变量:

    Functor& fn, const WorkData& workData

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

    return result;
    });
});
Run Code Online (Sandbox Code Playgroud)

我明白了:

**error C3480**: '`anonymous-namespace'::<lambda3>::fn': a lambda capture variable must be from an enclosing function scope
Run Code Online (Sandbox Code Playgroud)

似乎编译器不喜欢我尝试在未来实例中捕获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;
    });
});
Run Code Online (Sandbox Code Playgroud)

这种行为符合吗?我总是需要复制捕获的变量,以便在嵌套的lambda上捕获相同的变量?

Jar*_*Par 13

这是Visual Studio 2010 C++编译器的已知限制.这是跟踪它的连接问题

它目前在下一版本中标记为已修复