
Boost : 
From: Cromwell Enage (sponage_at_[hidden])
Date: 20050920 16:17:23
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. Here are my takes on laziness:
<take id="point1">
A metafunction returns lazily if it can be used
interchangeably with its return type. Numeric
metatypes such as integral_c are examples of
metafunctions that return lazily, e.g. "int_<6>" is
the same as "typename int_<6>::type". Metafunctions
such as next/prior, however, do not return lazily
because they cannot be used interchangeably with their
return types. For example, "times<next<int_<4>
>,prior<long_<8> > >" is illegal; the expression must
be "times<typename next<int_<4> >::type,typename
prior<long_<8> >::type>".
</take>
<take id="point2">
A metafunction evaluates a certain template argument
lazily if it does not require the argument to be a
fully instantiated type; otherwise, the evaluation is
strict. The eval_if metafunction will strictly
evaluate the second argument if the first argument is
equivalent to false_; otherwise, it will strictly
evaluate the third argument.
</take>
I'm less sure about point2 than I am about point1.
In any case, feel free to correct any knowledge
deficiencies I've exhibited, to make these definitions
more complete. More examples would also be a great
help.
Cromwell D. Enage
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk