On 07/27/2012 11:49 PM, Chad J wrote:

> Range r3 = [1,2,3]; // Element type inferred.

If you mean that you wanted a Range!int on the left-hand side, unfortunately there is no template type deduction for struct and class templates.

On the other hand, there is type deduction for function templates and that is the reason for the common approach of providing a convenient function along with struct and class templates:

struct Range(T)
{
    this(T[] slice)
    {}
}

Range!T range(T)(T[] args)
{
    return Range!T(args);
}

void main()
{
    auto r = range([1,2,3]);
    assert(typeid(r) == typeid(Range!int));
}

Ali

Reply via email to