Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
September 25, 2009 template parameters | ||||
---|---|---|---|---|
| ||||
Hello. Today I was looking at the grammar for template value parameters and realized I didn't know what the conditional expression is for in TemplateValueParameter => BasicType Declarator : ConditionalExpression So what does it do? (I assume = ConditionalExpression is the default value for the parameter) |
September 25, 2009 Re: template parameters | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | Hello Ellery, > Hello. > > Today I was looking at the grammar for template value parameters and > realized I didn't know what the conditional expression is for in > > TemplateValueParameter => BasicType Declarator : ConditionalExpression > > So what does it do? > > (I assume = ConditionalExpression is the default value for the > parameter) > That is correct. it would seem that expression should be used, but that includes an assignment expression so the next things down is used. http://www.digitalmars.com/d/1.0/expression.html#AssignExpression |
September 25, 2009 Re: template parameters | ||||
---|---|---|---|---|
| ||||
Posted in reply to BCS | BCS wrote:
> Hello Ellery,
>
>> Hello.
>>
>> Today I was looking at the grammar for template value parameters and realized I didn't know what the conditional expression is for in
>>
>> TemplateValueParameter => BasicType Declarator : ConditionalExpression
>>
>> So what does it do?
>>
>> (I assume = ConditionalExpression is the default value for the
>> parameter)
>>
>
> That is correct. it would seem that expression should be used, but that includes an assignment expression so the next things down is used.
>
> http://www.digitalmars.com/d/1.0/expression.html#AssignExpression
>
>
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?
|
September 25, 2009 Re: template parameters | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | 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) {}
|
September 25, 2009 Re: template parameters | ||||
---|---|---|---|---|
| ||||
Posted in reply to Christopher Wright | 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?
|
September 26, 2009 Re: template parameters | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | On Fri, Sep 25, 2009 at 6:48 PM, Ellery Newcomer <ellery-newcomer@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); }
|
September 26, 2009 Re: template parameters | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | Hello Ellery,
> BCS wrote:
>
>> Hello Ellery,
>>
>>> Hello.
>>>
>>> Today I was looking at the grammar for template value parameters and
>>> realized I didn't know what the conditional expression is for in
>>>
>>> TemplateValueParameter => BasicType Declarator :
>>> ConditionalExpression
>>>
>>> So what does it do?
>>>
>>> (I assume = ConditionalExpression is the default value for the
>>> parameter)
>>>
>> That is correct. it would seem that expression should be used, but
>> that includes an assignment expression so the next things down is
>> used.
>>
>> http://www.digitalmars.com/d/1.0/expression.html#AssignExpression
>>
> 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?
>
You should check me on this but I think it's explicit instantiation: "This is the special case for when given some value".
|
Copyright © 1999-2021 by the D Language Foundation