It is most definitely _by design_ that you cannot overload operators except as member functions.
I don't understand this design choice then. I don't see any problem in allowing UFCS operators. Because of the way UFCS works, it's guaranteed that there can't be any operator hijacking.