On Monday, 15 July 2013 at 18:56:38 UTC, Gary Willoughby wrote:
Are the two above class declarations achieving the same thing? i.e. is the type hint of the second snippet shorthand for the first's 'if'? If so which is preferred?

No, ":" stands for "same or implicitly convertible" while "==" is strict "same":

T foo1(T : int)()
{
        return T.init;
}

T foo2(T)()
        if (is(T == int))
{
        return T.init;
}

void main()
{
        foo1!short();
        foo2!short(); // error
}

As far as I know there are no "==" syntax for template specialization. Usually template specialization syntax is preferable for simple cases because it is more readable but any complex case pretty much requires "if" constraint.

Reply via email to