On Wednesday, 29 January 2014 at 02:30:00 UTC, bearophile wrote:
In std.typecons there is this template, that tells if a given type is any tuple, this means if it's the instantiation of a Tuple with any argument type:


template isTuple(T)
{
    static if (is(Unqual!T Unused : Tuple!Specs, Specs...))
    {
        enum isTuple = true;
    }
    else
    {
        enum isTuple = false;
    }
}


Do you think it's worth a D enhancement request to be able to write that code like this?

enum isTuple(T) = is(Unqual!T Unused : Tuple!Specs, Specs...);

Bye,
bearophile

We can already do this, but you have to omit the `Unused` alias (a semi-recent enhancement allows for that):

---
import std.traits : Unqual;

struct Tuple(Args...) {}

enum isTuple(T) = is(Unqual!T : Tuple!Types, Types...);

void main()
{
        Tuple!(int, string) t;
        static assert(isTuple!(typeof(t)));
}
---

On a related note, I would like the body of a template to be able to access aliases introduced in IsExpression's in the template's constraints.

Reply via email to