
David Abrahams wrote:
Cromwell Enage <sponage@yahoo.com> writes:
I remember a thread that ran for a while on this topic, and I need to make sure I've wrapped my head around it correctly.
I think you're referring to Vesa Karvonen's Lazy MPL (not sure if that's what he called it).
Here are my takes on laziness:
<take id="point-1"> A metafunction returns lazily if it can be used interchangeably with its return type.
I don't think that's the right way to think about it; Vesa's laziness is not about how things are returned, but about the treatment of arguments. A valid lazy metafunction argument is one that has a nested ::type. In other words, all lazy metadata are MPL nullary metafunctions.
Is this 'lazyness' in the same sense as 'lazy evaluation'? In other words, does it mean you could write an MPL function that generated the entire list of Fibbonaci numbers by returning a (meta)function that generates the numbers up to the point they are needed?