On Fri, Sep 25, 2009 at 6:48 PM, Ellery Newcomer <ellery-newco...@utulsa.edu> wrote: > Christopher Wright wrote: >> Ellery Newcomer wrote: >>> Okay, let me rephrase that: >>> >>> When you have a <something> preceded by a colon in a template value >>> parameter, what are its semantics? Is it the same as a default parameter >>> value? Is it some sort of constraining expression? Is it a vestige? >> >> void foo(T : int)(T value) >> { >> // value is implicitly convertible to int >> } >> >> It can do some pattern matching: >> >> void foo(T : V[U], V, U)(T dictionary) >> { >> // I have an associative array >> } >> >> In D2, it's usually going to be easier to use constraints: >> >> template foo(T) if (isAssociativeArray!T) {} > > Great, it does something specified for a type parameter. > > Now what does it do for a VALUE parameter?
Specialization for particular values. It's not really that useful in the face of static if. template fib(int n : 0) { const fib = 1; } template fib(int n : 1) { const fib = 1; } template fib(int n) { const fib = fib!(n - 2) + fib!(n - 1); }