$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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