Steven Watanabe wrote:
AMDG
Edward Diener wrote:
I understand the explanation about how placeholders work. The rule you are specifying appears to be that one never adds the '::type' to the end of a placeholder expression when it is being passed to an mpl construct. Is that correct ?
You should never add ::type to a placeholder expression at all. Otherwise, the metafunction will probably get very confused.
Ok, understood.
I wish I knew what the is an mpl function as opposed to what is not an mpl function. Perhaps the mpl algorithms are the mpl functions and everything which is not an algorithm is not an mpl function.
Inserters, Sequences, and the types listed under "Data Types" are not metafunctions. Everything listed in a section with Metafunctions of Algorithms in its name are metafunctions.
Your firsat sentence above I understand. The ssecond sentence above eludes me.
If your not sure, the only thing to do is look it up.
Look up what ? Where in the reference documentation does it tell me whether I need to add '::type' to the end of an mpl construct ?
Here are two examples from the reference:
template< typename Sequence , typename State , typename ForwardOp > struct accumulate <./accumulate.html> { typedef /unspecified/ type; };
template< typename Seq > struct back_inserter <./back-inserter.html> { // /unspecified/ // /.../ };
OK, I think I get it. If it is described as a metafunction, with its nested type, then '::type' is always used.