Boost logo

Boost :

Subject: Re: [boost] [mpl] sequence_tag
From: Aleksey Gurtovoy (agurtovoy_at_[hidden])
Date: 2009-01-13 23:37:50

On Tue, 13 Jan 2009 13:04:56 -0600, David Abrahams <dave_at_[hidden]>

> on Tue Jan 13 2009, Eric Niebler <> wrote:
>> A type is an mpl sequence if mpl::sequence_tag<T>::type is something
>> other than
>> mpl::non_sequence_tag. There are a few ways of hooking
>> mpl::sequence_tag, but the
>> easiest is for T to have a nested typedef named "tag". I find this
>> unfortunate. Consider proto expression types, which, in addition to
>> being nodes in
>> expression trees, are also both fusion sequences and mpl sequences.
>> A proto expression type has three tag types associated with it:
>> 1) The Proto tag (e.g., proto::tag::plus), a nested typedef
>> named "proto_tag"
>> 2) The Fusion tag, a nested typedef named "fusion_tag"
>> 3) The MPL tag
>> I can't in good conscience use a nested typedef named "tag" for the MPL
>> tag because
>> that would lead to confusion. It would be nice if MPL had instead
>> chosen the name
>> "mpl_tag" for its tag type. It's not too late to make the change ...
>> MPL could first
>> look for "mpl_tag" before falling back on "tag".
>> For now, I have chosen to specialize mpl::sequence_tag for the
>> proto::expr type. This
>> is an incomplete solution because types that extend proto::expr are not
>> themselves
>> automatically MPL sequences. Another solution might be to allow SFINAE
>> on
>> sequence_tag, like ...
>> template<typename T, typename EnableIf = void>
>> struct sequence_tag;
>> That way I could partially specialize for proto expression types, like:
>> template<typename T, typename enable_if<proto::is_expr<T> >::type>
>> struct sequence_tag { ...
>> Thoughts? FWIW, I'd prefer MPL to rename the nested tag typedef to
>> "mpl_tag".
> I've no objections. Aleksey?

I'd actually to do both: allow SFINAE on sequence_tag and implement
Eric's "first look for "mpl_tag" before falling back on "tag""
suggestion through that.

Aleksey Gurtovoy
MetaCommunications Engineering

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