On Thursday, 20 March 2014 at 19:38:25 UTC, Chris wrote:
I thought the array T[] traits could hold any _type_ the template Trait is instantiated into. That's where I got it wrong.

This is the best explanation for this restriction that I can think of:

struct Person(T)
{
    static if (is(T == int))
    {
        int age;
        @property int age() { return age; }
        @property int age(int val) { return age = val; }

@property bool isMiddleAge() { return age >= 30 && age <= 50); }
    }
    else static if (is(T == string))
    {
        string name;
        //Etc...
    }
}

Depending on what type T is, Person could have an age and associated methods, or a name and associated methods, but never both. If T is neither int nor string, it will completely empty. Therefore, Person!int MUST be a completely different type from Person!string or Person!float. It just doesn't make any sense otherwise.

Reply via email to