Edward,
Just wanted to add my 2 cent. That might help. You need ::type when you do type calculations.
For example:
Access the type stored in a type sequence -> ::type
transform type sequence to another type sequence -> ::type
So meta-algorithms operate on types and result in new types -> ::type
You don't need ::type when you pass parameters or transport the contained type(s), e.g.
Placeholder transports type parameter to a metafunction -> no ::type
vector of type passed to a metafunction also transports type(s) -> no ::type
Hope that helps.
Ovanes
P.S. sorry that I did not remove unrelated posting lines.
AMDG
You should never add ::type to a placeholder expression at all.
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 ?
>
Otherwise, the metafunction will probably get very confused.
Inserters, Sequences, and the types listed under "Data Types" are not
> 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.
>
metafunctions.
Everything listed in a section with Metafunctions of Algorithms in its
name are metafunctions.
Here are two examples from the reference:
>> 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 ?
>
template< typename Sequence , typename State , typename ForwardOp >
struct accumulate <./accumulate.html> {
typedef /unspecified/ type;
};
template< typename Seq >
struct back_inserter <./back-inserter.html> {
// /unspecified/
// /.../
};
In Christ,
Steven Watanabe