Argument S to typeof is not an expression

Meta jared771 at gmail.com
Mon May 6 23:41:24 PDT 2013


template Test(alias N)
if (isIntegral!(typeof(N)))
{
     struct S
     {
         typeof(N) n = N;

         auto opAdd(T)(T rhs)
         {
             //Error: argument S to typeof is not an expression
             pragma(msg, typeof(T));
             //Error: variable rhs cannot be read at compile time
             return Test!(n + rhs.n);
         }
     }
     auto st = S(N);
     alias Test = st;
}

void main()
{
     auto a = Test!2;
     auto b = Test!3;
     writeln(typeof(a).stringof ~ " a = ", a, ", ",
             typeof(b).stringof ~ " b = ", b, ", ",
             typeof(a + b).stringof ~ " a + b = ");
}

I don't really understand why either of these error messages are 
occurring. The first is just incomprehensible, and the second 
seems like it should work. In this case, rhs is fully accessible 
at compile time in the expression (a + b), so why does the 
compiler complain?


More information about the Digitalmars-d-learn mailing list