I have compiled this using Visual Studio 2010 compiler and it has compiler error issues on nested lambda capturing the variables captured already by the first lambda:
Functor& fn, const WorkData& workData
group.run([&fn, workData](){
async_future<ProcessorResult> future([&fn, workData]() -> ProcessorResult{
ProcessorResult result = fn.Process(workData);
return result;
});
});
I get:
**error C3480**: '`anonymous-namespace'::<lambda3>::fn': a lambda capture variable must be from an enclosing function scope
It seems that the compiler does not like that I try to capture inside the future instance the variables captured already by the group.run() method.
If I create local copies it works:
group.run([&fn, workData](){
Functor& fnlocal = fn;
WorkData workDatalocal = workData;
async_future<ProcessorResult> future([&fnlocal, workDatalocal]() -> ProcessorResult{
ProcessorResult result = fnlocal.Process(workDatalocal);
return result;
});
});
Is this behavior conformant ? I always need to make copies of captured variables in order to capture the same variables on a nested lambda ?