Since the implementations of `+-` and `*` do not share any code, I would split them into separate functions, and use template constraints rather than `static if` and `static assert`:
```
MatrixView!T opBinary(string op)(MatrixView!T rhs) pure
    if (op == "+" || op == "-")
{
    ...
}

MatrixView!T opBinary(string op)(MatrixView!T rhs) pure
    if (op == "*")
{
    ...
}
```
That way the compiler will be able to give you a better error message if you try to use an unsupported operator, rather than a static assertion failure.