www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - template parameters

reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
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)
Sep 25 2009
parent reply BCS <none anon.com> writes:
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
Sep 25 2009
parent reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
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?
Sep 25 2009
next sibling parent reply Christopher Wright <dhasenan gmail.com> writes:
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) {}
Sep 25 2009
parent reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
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?
Sep 25 2009
parent Jarrett Billingsley <jarrett.billingsley gmail.com> writes:
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 paramete=
r
 value? Is it some sort of constraining expression? Is it a vestige?
void foo(T : int)(T value) { =A0 =A0 // value is implicitly convertible to int } It can do some pattern matching: void foo(T : V[U], V, U)(T dictionary) { =A0 =A0 // 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 =3D 1; } template fib(int n : 1) { const fib =3D 1; } template fib(int n) { const fib =3D fib!(n - 2) + fib!(n - 1); }
Sep 25 2009
prev sibling parent BCS <none anon.com> writes:
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".
Sep 25 2009