Hello, this seems to work, but if I add the following double opBinary(string op, U) (U rhs) { static if(op == "^" && is(U: Group)) { // do something return 42; } } because I want to write the following: double d = g^h; I have the same problem again. This syntax isn't very intuitive.