Удаление объекта std :: function внутри себя
Это хорошо определенное поведение?
#include <functional>
void foo() {
auto f = new std::function<void()>;
*f = [f]() { delete f; };
(*f)();
f = nullptr;
}
int main() {
foo();
}
Используя самый последний g ++, если я делаю это в шаблоне, это вызывает недопустимые чтения во время работы в valgrind, в противном случае он работает нормально. Зачем? Это ошибка в 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>();
}