Template question about alias

Jarrett Billingsley kb3ctd2 at yahoo.com
Sat Mar 22 18:06:37 PDT 2008


"Edward Diener" <eddielee_no_spam_here at tropicsoft.com> wrote in message 
news:fs4a59$2e5v$1 at digitalmars.com...
> Another D template question.
>
> I am assuming that one can not create a variable which refers to a 
> template instance, but one can create an "alias" for a template instance, 
> ie.
>
> template MyTemplate(T) { T data; /* other decldefs ... */};
> MyTemplate!(int) aname; // illegal
> alias MyTemplate!(int) aname; // legal
>
> Is this correct ? If it is so, why did D not just scrap the use of 'alias' 
> in this case and allow the first form, 'MyTemplate!(int) aname;' to 
> represent an alias automatically, since it would save endlessly having to 
> type 'alias' for a syntax which could not be anything else ?

template MyTemplate(T)
{
    alias T MyTemplate;
}

MyTemplate!(int) aname; // legal, typeof(aname) is int
alias MyTemplate!(int) foo; // legal, foo is int
foo bar; // bar is int

In this case, the template is being used as a type.

It's not legal _in some cases_.  It is in others.  It requires semantic 
analysis to know whether it is or not, so it's not something that can be 
restricted by syntax. 





More information about the Digitalmars-d mailing list