mixin alias
0ffh
frank at frankhirsch.youknow.what.todo.net
Sun Dec 16 18:07:22 PST 2007
Derek Parnell wrote:
> 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.
Well, for one we'd have to disallow assignment expressions using the
aliased parameter (as well as pre- and post-increment), which is bad
for the goal of context insensitive scanning.
template Foo(alias b)
{
int X=(b=4);
}
void main()
{
int a=3;
printf("%i\n",a); // 3
mixin Foo!(a); // side effect here
printf("%i\n",a); // yeas, it's 4 now
printf("%i\n",X); // 4
}
regards, frank
More information about the Digitalmars-d-learn
mailing list