On Monday, 21 October 2013 at 18:42:27 UTC, John Colvin 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

Also:

    struct S{}

    template B(alias A)
    {
        alias B = A;
    }
    template C(A ...)
    {
        alias C = A[0];
    }
    pragma(msg, B!int); //Error: template instance B!(int)
          //does not match template declaration B(alias A)

Alias doesn't take primitive types. I usually add a regular B(A) template overload too. Note that when you have a alias A overload, structs uses that rather than the basic A template.

    pragma(msg, B!S); // S
    pragma(msg, C!int); // int
    pragma(msg, C!S); // S

Reply via email to