mixin alias

Derek Parnell derek at psych.ward
Sun Dec 16 14:53:15 PST 2007


On Sun, 16 Dec 2007 15:51:38 -0500, Jarrett Billingsley wrote:

> "Derek Parnell" <derek at psych.ward> wrote in message 
> news:jnak6l8ihhe1.k3tzm3in813z.dlg at 40tude.net...
>> Is there any reason why the alias template parameter cannot be a literal?
>>
>>
>> template Foo(alias b) {
>>   int X = b;
>> }
>>
>> void main() {
>>  int y = 4;
>>  mixin Foo!(y);  // This is okay
>>  mixin Foo!(4);  // This fails to compile
>>   // "mixin Foo!(4) does not match any template declaration"
>> }
>>
> 
> This is correct.  You can only alias things that have names; the number 3 
> does not have a name.

I know that is 'correct', but I was really asking what is the rationale
behind such an apparently arbitrary design decision.


> What's weird is that:
> 
> template Foo(alias b)
> {
>     int X = b;
> }
> 
> template Foo(int b)
> {
>     int X = b;
> }
> 
> void main()
> {
>     int y = 4;
>     mixin Foo!(4); // OK
>     // mixin Foo!(y); // fails, matches multiple (???)
> }
> 
> doesn't.  Why does Foo!(y) match Foo(int)?
> 
> A (kind of dumb) workaround is:
> 
> template Foo(b...)
> {
>     static assert(b.length == 1);
>     int X = b[0];
> }

There are still a lot of things re templates that strike me as eccentric.

-- 
Derek Parnell
Melbourne, Australia
skype: derek.j.parnell


More information about the Digitalmars-d-learn mailing list