Up until now, the most basic ingredient is missing: creation of and access
to local variables in the stack. When recursion comes into play, you will
soon realize the need to have true local variables. It may seem that we do
not need this at all since an unnamed lambda function cannot call itself
anyway; at least not directly. With some sort of arrangement, situations
will arise where a lambda function becomes recursive. A typical situation
occurs when we store a lambda function in a Boost.Function,
essentially naming the unnamed lambda.

There will also be situations where a lambda function gets passed as an argument
to another function. This is a more common situation. In this case, the lambda
function assumes a new scope; new arguments and possibly new local variables.