Template questions

Bill Baxter dnewsgroup at billbaxter.com
Sat Mar 22 18:03:46 PDT 2008


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() { .. }
}

--bb



More information about the Digitalmars-d mailing list