Является ли это четко определенным поведением?
#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>();
}