Dado o código a seguir que tenta alocar uma captura lambda no heap:
#include <array>
int test(void) {
//auto big_lambda = new auto([d = std::array<int, 1024>{5,1,2}]() { return d[2]; });
auto big_lambda = new auto(std::move([d = std::array<int, 1024>{5,1,2}]() { return d[2]; }));
auto res = (*big_lambda)();
delete big_lambda;
return res;
}
Por que encapsular o lambda std::move
cria a captura na pilha? É porque std::move
"materializa" o lambda temporário antes de ser passado para o construtor de movimento (acho?)?