dropping parentheses on template instantiation

Denis Koroskin 2korden at gmail.com
Sun Oct 5 11:42:56 PDT 2008


On Sun, 05 Oct 2008 22:18:26 +0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> 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
>
> That sounds like a possible winner. In this case the "#" becomes  
> considerably more attractive, in fact very attractive exactly because it  
> looks unlike any letter:
>
> auto covariance = Matrix#real(n, n);
> auto normalized = SparseVector#double(n);
>
> Ideas?
>
>
> Andrei
>
> P.S. The Sad Pirate is the emoticon
>
> .(
>
> It doesn't have an eye and is sad, too.

Just to clarify things: Do you propose moving the first template argument  
outside of the parentheses *or* ditching them iff there is only one  
parameter? I mean, what does the original code look like, because there is  
ambiguaty in your statement (to me):

const int n = 42;
auto covariance = Matrix!(real, n, n); <-> auto covariance =  
Matrix#real(n,n);

*or*

auto covariance = Matrix!(real)(n, n); <-> auto covariance =  
Matrix#real(n,n);

Other than that Vector at real or Vector#real both sound good!

(BTW, don't start new thread by repling to some other one, please)



More information about the Digitalmars-d mailing list