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); }

Reply via email to