On 2013-05-07 08:41, 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?
As a workaround for "typeof" you can use this: https://github.com/jacob-carlborg/orange/blob/master/orange/util/Traits.d#L213 -- /Jacob Carlborg
