Eliminar un objeto std :: function dentro de sí mismo
¿Es este comportamiento bien definido?
#include <functional>
void foo() {
auto f = new std::function<void()>;
*f = [f]() { delete f; };
(*f)();
f = nullptr;
}
int main() {
foo();
}
Usando el g ++ más reciente, si hago esto dentro de una plantilla, causa lecturas no válidas mientras se ejecuta bajo valgrind, de lo contrario funciona bien. ¿Por qué? ¿Es esto un error en g ++?
#include <functional>
template<std::size_t>
void foo() {
auto f = new std::function<void()>;
*f = [f]() { delete f; };
(*f)();
f = nullptr;
}
int main() {
foo<0>();
}