An Adaptable Generator is a Generator with a nested
typedef that defines its result type. [1] This nested typedef makes
it possible to use function object adaptors.
[1]
Note the implication of this: a function pointer T (*f)()
is a Generator, but not an Adaptable Generator: the
expression f::result_type is nonsensical.