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