O código abaixo trava quando o lambda f
é chamado.
No entanto, minha expectativa é que, como o pacote de parâmetros é capturado por valor dentro da função "wrapper", ele deveria ter funcionado bem!
Alguém poderia ajudar com o entendimento correto?
void argPrinter(double d, int v, bool b) {
cout << "argPrinter: " << " " << d << " " << v << " " << b << endl;
}
template <typename Callable, typename... Args>
auto wrapper(Callable op, Args&&... args) {
auto result = [&op, args...] () mutable {
// args... are captured by value.
cout << "Hello\n";
op(args...);
};
return result;
}
int main() {
auto f = wrapper(argPrinter, 28.7, -99, true);
f(); // **SIGSEGV at this call!!**
}