Hello,
Please see the attached draft proposal. This expands on the earlier thread on relaxing the common reference requirements for equality_comparable_with. I updated the draft based on feedback on the other thread regarding adding comparisons to nullptr and nullopt.
In short, this proposal relaxes the comparison_relation_with concepts by relaxing the common_reference_with requirement in a way to support move-only types, as previously the common_reference_with requirement requires copyability of the arguments if the common reference was not actually a reference. This proposal changes the convertible_to<const T&, CR> (where CR is the common reference) to convertible_to<T&&, const CR&>, which both allows avoiding the copy if CR is the same type as T and avoids the copy (calling CR(const T&)) of T if CR is not the same type as T.
One concern I have is with respect to the semantic requirements in the proposed wording. It might be giving the impression that two values are only comparison_relation_with if they are non-const, but this is not so; they can be const, but the operator@ must yield the same result ignoring side effects as if the lvalues were non-const. I'm not sure if the proposed wording properly captures that.
Thanks,
Justin Bassett