On 19. Nov 2017, at 06:22, David Stone via Boost
wrote: Here is the initial wording of my proposal for the C++ standardization committee on generating more operators by default. I welcome any feedback. I intend to present this at the next meeting in March.
https://github.com/davidstone/isocpp/blob/master/generate-operators.md
Arithmetic operators (especially + and *) can be commutative, giving you very different (and more efficient) implementations. In fact, it is my feeling that commutative + and * are more common than the non-commutative versions (even implied by calling them "arithmetic"). Your proposal completely ignores that (and I don't see how you'd be able to specify if you want a commutative or non-commutative version). Also, picking std::string::operator+ is a bad example. It is too special to be the template for a general implementation, not only because it is non-commutative but also because classes generally don't have capacity() or other similar properties which should play a role on how to overload operators. Even if we were to agree that your implementation is "ideal" for this specific case, you could just use that implementation for std::string specifically without any additional support from the language. And if you want to argue that there are more, similar enough cases like that this would only speak for a library-based solution (like Boost.Operators or taocpp/operators) to allow different variants to co-exist and be explicitly named by the library author and picked by the user. Language support must be universal enough to cover 90% (or even 99%) of the use-cases - your proposal fails to do that.