Template questions

Edward Diener eddielee_no_spam_here at tropicsoft.com
Sat Mar 22 18:20:32 PDT 2008


Bill Baxter wrote:
> Edward Diener wrote:
>> I am going to be asking a number of questions about D templates in 
>> various posts, and I hope others can help me understand D templates 
>> despite the documentation.
>>
>> First question:
>>
>> In the documentation on templates I read these lines:
>>
>> "Even if template arguments are implicitly converted to the same 
>> template parameter type, they still refer to different instances:
>> struct TFoo(int x) { }
>> static assert(is(TFoo!(3) == TFoo!(2 + 1))); // 3 and 2+1 are both 3 
>> of // type
>> int
>> static assert(!is(TFoo!(3) == TFoo!(3u))); // 3u and 3 are different
>> // types"
>>
>> To what is the "int" on line 6 refer ?
>> Why is line 3 considered a D template ? It does not begin with 
>> 'template ...'. It looks like a simple 'struct' to me with a public 
>> member. How then can it be instantiated as if it were a template ?
> 
> struct TFoo(int x) { .. }
> 
> is shorthand in D for
> 
> template TFoo(int x) {
>    struct TFoo { .. }
> }
> 
> Just like how with D function templates this
> 
> void Foo(int x)() { .. }
> 
> is shorthand for this:
> 
> template Foo(int x) {
>    void Foo() { .. }
> }

Please explain the rules for this "shorthand". I can not find them in 
the PDF documenatation.

Is the rule that this applies only if there is a single data field in 
the struct/class class, with no other data or member functions of any 
kind, or a single parameter in the function case ?

If that is the rule, how does one define a class/struct with a single 
daya parameter which is not a template, or does one just give up on such 
a type ?

If that is the rule how does one define a function which takes a single 
parameter which is not a template function, or does one just give up on 
such a function ?



More information about the Digitalmars-d mailing list