Cannot alias expression

simendsjo simendsjo at gmail.com
Mon Oct 21 12:33:06 PDT 2013


On Monday, 21 October 2013 at 16:51:02 UTC, simendsjo wrote:
> On Monday, 21 October 2013 at 15:00:26 UTC, Dicebot wrote:
>> On Monday, 21 October 2013 at 12:58:55 UTC, John Colvin wrote:
>>> I suspect I'm being very dumb here, but I can't get my head 
>>> around this:
>>>
>>>   template B(alias A)
>>>   {
>>> 	alias B = A;
>>>   }
>>>   template C(A ...)
>>>   {
>>> 	alias C = A[0];
>>>   }
>>>   static assert(B!1 == 1); //fine
>>>   static assert(C!1 == 1); //Error: cannot alias an 
>>> expression 1
>>
>> I think this is a good match for a gold collection of "awkward 
>> mismatch of template alias vs normal alias". I am quite 
>> surprised former template work actually, aliases are not 
>> supposed to handle expressions at all. But magic of template 
>> alias parameter turns expression into symbol and here we go.
>
> I didn't know the B template would work... Is this correct 
> semantics according to the spec?

I've used quite some T(A...), so I was used to literals not being
aliasable.
A bit strange that literals "is symbols" (or how I should phrase
it) when using T(alias A), but not T(A...).


More information about the Digitalmars-d-learn mailing list