On Wednesday, 25 May 2016 at 14:32:11 UTC, ag0aep6g wrote:
On 05/25/2016 03:27 PM, Chris wrote:
Why can the tuple be iterated with foreach, as in my quick fix, and indexed with tuple[0..], but is not accepted as a range? What are the
differences?

popFront doesn't make sense with a tuple (aka expression list). When you remove the first element of a tuple, you get another tuple of a different type, but popFront can't change the type of the range.

In code:

----
void main()
{
    import std.meta: AliasSeq;
    AliasSeq!(int, int, int) tuple = AliasSeq!(1, 2, 3);
tuple.popFront(); /* How would this be implemented? Would have to change tuple's type to AliasSeq!(int, int). */
}
----

Is there a way to rangify a tuple?

std.range.only:

----
void main()
{
    import std.meta: AliasSeq;
    import std.range: only;
    AliasSeq!(int, int, int) tuple = AliasSeq!(1, 2, 3);
    auto range = only(tuple);
    range.popFront(); /* ok */
}
----

I see. Maybe it would be worth adding a wrapper to typecons.Tuple or std.range that helps to rangify tuples. I cannot think of any use case right now. I never needed this and in the example that started this thread, it would keep the function from converting mixed tuples (cf. my example above).

Reply via email to