Andrei:

>D's constrained templates were introduced on 17 June 2008 and they've been a 
>smashing hit. Virtually all of Phobos uses them, and I'm sure a lot of generic 
>client code. They take half a minute to explain and solve a difficult problem 
>in a very simple manner.<

A template with two constrains makes it less handy to add error messages that 
explain why the instantiation has failed:

template Foo(T) if (Pred1!T && Pred2!T) {
    ...
}


An alternative syntax (same semantics) similar to a (static) precondition 
Contract gives more space for error messages:

template Foo(T)
    static in {
        static assert(Pred1!T, "err msg 1");
        static assert(Pred2!T, "err msg 2");
    } body {
        ...
    }

Function templates too may have the optional static precondition, before the 
optional (run time) precondition.

Bye,
bearophile

Reply via email to