У меня есть следующий код (значительно упрощенный):
#include<functional>
std::function<int()> Count() {
int x = 0;
return [=]() mutable { return x++; };
}
std::function<int()> Negate(std::function<int()> x) {
return [=]() { return -x(); };
}
int main() {
std::function<int()> n;
int z = 0;
if (true) {
auto c = Count();
z = c();
n = Negate(c);
z = n();
z = n();
}
z = n();
z = n();
}
Моя проблема в том, что вызовы n работают только внутри оператора if.Как только if теряет область видимости, c уничтожается и n перестает работать.Есть ли разумный способ исправить это?Желательно неинвазивно.