dropping parentheses on template instantiation

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Oct 5 12:40:37 PDT 2008


Sean Kelly wrote:
> Andrei Alexandrescu wrote:
>> I just realized something different. After making an informal review 
>> of some code, I saw that a large percentage of template instantiations 
>> only need ONE argument.
>>
>> This makes me think, with the old "!" notation, parentheses could be 
>> dropped entirely without prejudice:
>>
>> auto covariance = Matrix!real(n, n);
>> auto normalized = SparseVector!double(n);
>>
>> and so on.
>>
>> To the unbridled joy of the enemies of the Sad Pirate, the dot won't 
>> work for template instantiation because without the parentheses it 
>> DOES engender ambiguity.
>>
>> Now say we take the following route:
>>
>> 1) We find something different from shouting
>>
>> 2) We drop the parentheses for 1 argument
> 
> It's a bit off-topic, but why are we required to supply an empty 
> template list when instantiating a type that has all defaulted template 
> arguments?  ie.
> 
>     class C( T = int, U = int ) {}
> 
>     auto c = new C!();
>     auto d = new C; // why can't it be this?
> 
> I asked about this a while back but never got an answer.

I'd love that. I think there's ambiguity here:

struct A(T = int)
{
     void foo()
     {
         auto x = new A;
     }
}

A at double whatever;
whatever.foo;

Will x be A at int or A at double?

Andrei

P.S. Boy I like the "at". Down with the shouting!




More information about the Digitalmars-d mailing list