Boost logo

Boost :

From: Eric Friedman (ebf_at_[hidden])
Date: 2003-04-30 02:13:03


David Abrahams wrote:
> That's not (I think) what Alexander had in mind: IIUC he was talking
> about a wrapper over tuples such that:
>
> tuple_sequence<some_tuple>
>
> is an MPL sequence. Of course, a better solution would be to
> specialize begin/end so that any Boost tuple is *itself* an MPL
> sequence.

I am a bit uneasy about any proposal making adding MPL sequence semantics to
an otherwise-typical value type. If such proposals are implemented, I see a
significant ambiguity problem arising in generic code: given a type T that
is an MPL sequence, should we treat it as a sequence or as a value type?

In particular, if we were to implement boost::tuple as an MPL sequence, the
following code would seem to me quite unclear insofar as its intended
behavior:

   typedef mpl::list<int, std::string> some_types;
   typedef boost::tuple<int, std::string> some_tuple;

   typedef boost::variant<some_types> v1; // ok, unambiguous
   typedef boost::variant<some_tuple> v2; // ambiguity!?

It seems clear that objects of type v1 should behave equivalently to
boost::variant<int, std::string>. However, if boost::tuple were an MPL
sequence, it seems less clear whether objects of type v2 should behave
likewise or instead as a variant holding a 2-tuple.

Thus, this question is of particular importance for boost::variant. But
also, I imagine, it is important for any other type implementing a
pseudo-variadic template interface as I intend for the final release of
variant (which is coming, by the way).

Input?

Thanks,
Eric


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk