Stocker un avenir dans une liste

Je veux stocker les futurs de plusieurs threads générés en utilisant async dans une liste pour récupérer leurs résultats plus tard.

future f = async(doLater, parameter); list<future> l; l.push_back(f); 

Cependant, le compilateur affiche le message d’erreur suivant

/usr/include/c++/4.7/bits/stl_list.h:115:71: erreur: utilisation de la fonction supprimée ‘std :: future :: future (const std :: future &) [avec _Res = int; std :: future = std :: future] ‘

Est-ce que je fais quelque chose de mal ou est-ce que les listes ne sont pas supposées stocker les futures? Si ce n’est pas le cas, quoi utiliser à la place?

std::future n’est pas copiable – vous devez vous déplacer dans la liste. Non plus:

 future f = async(doLater, parameter); list> l; l.push_back(std::move(f)); 

ou:

 list> l; l.push_back(async(doLater, parameter)); 

fonctionnera, ce dernier étant préférable car il ne laisse pas d’object déplacé jaillissant du champ d’application.