In part 1 we implemented a barebones
future-like class that supported
.then continuations without needing allocations or type-erasure. The idea behind it was to encode the entire computation chain into a single object with a huge type:
// pseudocode auto f = initiate(A).then(B).then(C).then(D); // ...would become something like: /* D<C<B<A>>>> */
We previously stored the "parent" node by moving
*this as part of a generalized lambda capture, and stored the
Callable itself via EBO (empty base optimization). As we will explicitly need access to the "parent" node's type to support non-blocking schedulers and implement
when_all in the future, it's time significantly improve our design.