using namespace std;
template <typename T>
auto x(function<T(T)> f, T t = {}) {
return [=] {
T static x = t;
return x = f(x);
};
}
function f {[] (int x) { return x + 1; }};
function g {x(f)};
using namespace std;
template <typename T>
auto x(function<T(T)> f, T t = {}) {
return [=] {
T static x = t;
return x = f(x);
};
}
function f {[] (int x) { return x + 1; }};
function g {x(f)};