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