First it was simpler to understand. Second it worked well with
inheritance.
The current design requires that you know of templates and template
constrains, and it requires complicated workarounds if you're dealing
with inheritance (as illustrated by this thread). Basically, we've made
a simple, easy to understand feature into an expert-only one.
And for what sakes? Sure the new design has the advantage that you can
define multiple operators in one go. But for all the cases where you
don't define operators to be the same variation on a theme, and even
more for those involving inheritance, it's more complicated now. And
defining multiple operators in one go wouldn't have been so hard with
the older regime either. All you needed was a mixin to automatically
generate properly named functions for each operator the opBinary
template can instantiate.
I was always skeptical of this new syntax, and this hasn't changed.
Old style was nothing but merely C++ with named operators.
Shortcomings were obvious and i have always thinking of a solution exactly
like this one.
Now it is quite template friendly, as it should be.
For inheritance, i am unable to find a use case that makes sense.
--
Using Opera's revolutionary email client: http://www.opera.com/mail/