Argument S to typeof is not an expression
Anonimous
tr1 at google.com
Tue May 7 00:17:31 PDT 2013
On Tuesday, 7 May 2013 at 06:41:25 UTC, Meta wrote:
> 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?
First error occures,because typeof(T) is undefined - T is a
type,not value.
About second error,although in this case rhs is
accessible,compiler can't know
that you won't call this function in runtime,so it's expected -
it's just ordinary function.
More information about the Digitalmars-d-learn
mailing list