Como capturar std :: unique_ptr “by move” para um lambda em std :: for_each

Estou aprendendo os novos recursos do c ++ 11 e me deparei com esse problema. Eu gostaria de capturar um unique_ptr movendo-o dentro de um lambda como um argumento para for_each.

configuração:

<code>std::array<int,4> arr = {1,3,5,6};
std::unique_ptr<int> p(new int);  (*p) = 3;
</code>

tentativa 1 - não funciona porque o unique_ptr não possui um construtor de cópia. c ++ 0x não especifica a sintaxe de passagem por movimentação.

<code>std::for_each(arr.begin(), arr.end(), [p](int& i) { i+=*p; });
</code>

tentativa 2 - use bind para ligar uma cópia movida de p para uma função que leva int e:

<code>std::for_each(arr.begin(), arr.end(),
     std::bind([](const unique_ptr<int>& p, int& i){
          i += (*p);
     }, std::move(p))
);
</code>

Compiler reclama que'result' : symbol is neither a class template nor a function template.

O objetivo principal do exercício é entender como uma variável móvel pode ser capturada em um lambda que é armazenado em cache para uso posterior.

questionAnswers(2)

yourAnswerToTheQuestion