On Mon, 2 Mar 2020 at 14:30, Nikita Popov <nikita....@gmail.com> wrote:
> > I think others have already expanded on why it's not possible to group > operators in a meaningful way. The DateTime example is probably the most > pertinent there, in that DateTime + DateTime is illegal, while DateTime - > DateTime is legal. If we can't even require both + and - as part of one > interface, there is very little we can require. > In my opinion, not being able to overload both + and - is a sign that the class is "abusing" operator overloading, in that it is using it to build a domain-specific language, rather than truly overloading *operations*. An overload of "DateTime - DateTime" wouldn't represent "subtraction" for precisely the reason that "DateTime + DateTime" doesn't make sense - DateTime doesn't follow arithmetical logic. Instead, it would represent a domain-specific definition of "difference". A more "correct" operator overloading would be DateTime + DateInterval, and its inverse DateTime - DateInterval. The common consensus seems to be that we don't want domain-specific overloading (the example of << and >> in C++ has been mentioned several times). If that's the case, then an interface that prevents you implementing DateTime - DateTime seems perfectly legitimate. Regards, -- Rowan Tommins [IMSoP]