2012-03-31 13 views
12

ho compilato questo utilizzando Visual Studio 2010 compilatore e ha problemi di errore del compilatore su lambda nidificato catturare le variabili catturati già dal primo lambda:nidificati Lambda problema di cattura

Functor& fn, const WorkData& workData 

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

    return result; 
    }); 
}); 

ottengo:

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

Sembra che al compilatore non piaccia che cerco di catturare all'interno del futuro istanza le variabili acquisite già dal metodo group.run().

Se creo copie locali funziona:

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

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

    return result; 
    }); 
}); 

È questo comportamento conforme? Ho sempre bisogno di fare copie delle variabili catturate per catturare le stesse variabili su un lambda annidato?

+0

oog - caratteristiche come questa sono la ragione non ho molto interesse in C++ 11. –

+0

:-) Sì, ma lo aggiustano – Ghita

+0

riparano * cosa *? Non stavo parlando del bug del compilatore, stavo parlando delle verruche legate alla lingua. –

risposta

4

Non è conforme alla bozza finale, ma è è conforme al testo nel momento in cui sono stati implementati, cioè non è un difetto VS ma non è esattamente Standard. La prossima versione, colloquialmente nota come vNext, avrà un'implementazione aggiornata per utilizzare l'ultima formulazione.

Problemi correlati