From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2023-02-20 22:45:33


On 2/21/23 01:00, Gavin Lambert via Boost wrote:
> On 21/02/2023 00:30, Andrey Semashev wrote:
>> I think you're missing the point that operator== isn't always used to
>> implement equivalence. This is also true wrt. other operators and their
>> default function. We have a number of lambda libraries in Boost, as well
>> as Boost.Proto and Boost.Spirit that wouldn't have existed if we
>> followed your logic.
>
> No, I addressed that.  Even in lambda libraries, operator== should be
> used only for equivalence (as an indirection rather than directly), and
> as such it should still be commutative and agnostic of specific order.
> Assuming that, it shouldn't be broken by the C++20 changes.

In template expressions, operators are generally not commutative because
the type of the result depends on types of the left and right arguments.