Template params: decl vs instantiation syntax

Daniel Gibson metalcaedes at gmail.com
Thu Oct 7 05:44:02 PDT 2010


Nick Sabalausky schrieb:
> "Daniel Gibson" <metalcaedes at gmail.com> wrote in message 
> news:i8kakj$230f$1 at digitalmars.com...
>> Nick Sabalausky schrieb:
>>> A trivial thing, but something I've been wondering about for awhile:
>>>
>>> Function parameter syntax:
>>>     Declare: foo(bar)
>>>     Call: foo(bar)
>>>
>>> Template parameter syntax in C++/C#/etc:
>>>     Declare: foo<bar>
>>>     Instantiate: foo<bar>
>>>
>>> Template parameter syntax in D:
>>>     Declare: foo(bar)
>>>     Instantiate: foo!(bar)
>>>
>>> Why the difference in syntax between declaring and instantiating? Why not 
>>> use the exclamation for declaration too? Would that create a grammar 
>>> ambiguity? Some other reason? No particular reason?
>>>
>>> Obviously it's not a big issue, just curious.
>>>
>>>
>> because:
>>
>> import std.stdio;
>>
>> void fun(int X=3)(int a = 4){
>> writefln("X==%s a==%s", X, a);
>> }
>>
>> void main() {
>> fun!(1)(2); // X==1, a==2
>> fun(2); // X==3, a==2
>> fun!(2); // X==2, a==4
>> }
>>
>>
> 
> I think you misunderstood the question. I understand why there's a 
> difference between function parameter syntax and template parameter syntax. 
> What I don't understand is why there's a difference between the syntaxes for 
> template instantiations and template declarations. Ie, why isn't D designed 
> so that your 'fun' function above is like this?:
> 
> // Note the "!":
> void fun!(int X=3)(int a = 4)
> {...}
> 
> Or why class templates aren't like this?:
> 
> class Foo!(T) {}
> 
> For ordinary functions, you call *and* define using "()".  In certain non-D 
> langauges, templates/generics are instantiated *and* defined using "<>". In 
> D, templates are instantiated with "!()", but they're defined with "()". I'm 
> wondering why they're not instantiated *and* defined using "!()".
> 

Ah ok, I read over "Why not use the exclamation for declaration too?" 
and thought you wanted to eliminate the ! for instantiation. Sorry.


More information about the Digitalmars-d mailing list