Boost logo

Boost :

From: Cromwell Enage (sponage_at_[hidden])
Date: 2005-09-20 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="point-1">
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 id="point-2">
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.

I'm less sure about point-2 than I am about point-1.
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

                              Cromwell D. Enage

Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around

Boost list run by bdawes at, gregod at, cpdaniel at, john at