... and another... struct S(T, int N) { public auto opBinary(string op)(in S!(T, N) other) const { return this; } } void main() { S!(int, 1) m; m = m * m; } Error: 'm' is not of arithmetic type, it is a Matrix!(int,1) Error: 'm' is not of arithmetic type, it is a Matrix!(int,1)