25 enum Op {NOP, ADD, SUB} op{};
26 ~Later() {
delete nested; nested =
nullptr; op = NOP; }
27 Later(T& val): where(val) {}
28 Later(T& v,
Later *n, Op op): where(v), nested(n), op(op) {}
33 Later(
Later &&l) noexcept : where(l.where), nested(l.nested), op(l.op) {
38 if (
this == &l)
return *
this;
39 new (
this)
Later(std::move(l));
42 Later operator+(T &val) {
45 ::new
Later{std::move(*
this)},
49 Later operator-(T &val) {
52 ::new
Later{std::move(*
this)},
59 case ADD:
return nested->
get() + where;
60 case SUB:
return nested->
get() - where;
61 default:
return where;
65 void *
operator new(
size_t sz,
Later *where) {