template alias parameters

Jesse Phillips jessekphillips+D at gmail.com
Wed Apr 6 20:48:42 PDT 2011


enuhtac Wrote:

> Hi,
> 
> I'm playing around with template alias parameters. At the moment I'm
> considering the following simple code:
> 
> struct A
> {};
> 
> struct B( T )
> {
>     T t;
> };
> 
> struct C( alias T )
> {
>     T t;
> };
> 
> void main()
> {
>     B!A a;
>     C!A b;
> }
> 
> What exactly is the difference between a and b? Both seem to do the same

No difference.

> thing but obviously there is a difference as I cannot instanciate C with
> buildin types as template parameter ("C!int c" results in "Error:
> template instance C!(int) does not match template declaration C(alias T)").

I'm going to take a guess at the issue here. alias parameters are supposed to bind to a symbol. Types aren't symbols, they aren't things that will have an address during runtime. I'm not exactly sure why the struct is excepted.
 
> The other question is: is there a possibility to distinguinish between
> different "things" passed to a template alias paramter? - Like "isType",
> "isVariable", "isLiteral", "isTemplate" ...
> 
> enuhtac

There isn't a distinction for literal vs variable. I'm pretty sure. As mentioned you don't pass types to alias. And you probably wouldn't write a template that accepts a template or a variable.

As it is a symbol you do get to use typeof() and the likes on it.


More information about the Digitalmars-d-learn mailing list