C++20概念中"equal"的概念

Concept of "equal" in C++20 concepts

我多次发现,在阅读一些概念定义时,术语 等于 的使用,如 Swappable:

Let t1 and t2 be equality-preserving expressions that denote distinct equal objects of type T,

等于是否在标准的某处定义?我猜这意味着两个对象的语义,或者它们引用的值(赋予它们表示的域值的人类语义)是相同的,即使对象不可比较(没有 operator== 重载),或者其他东西像那样抽象(例如,如果 a == b 假设它是一个有效的表达式,那么两个对象 ab 是相等的——例如,因为 operator== 没有定义因为它不是必需的)。

由于模板将根据用户提供的语义工作,平等的概念主要由程序定义。例如,如果我使用不区分大小写的字符串,我可以认为字符串 FoOfOo 相等,而 FoObAr 不相等。我提供的操作必须反映这种语义。

平等不是根据operator==定义的;相反,operator==(在某种意义上)是基于平等来定义的。 [concept.equalitycomparable]/equality_comparable:

template<class T>
  concept equality_comparable = weakly-equality-comparable-with<T, T>;

Let a and b be objects of type T. T models equality_­comparable only if bool(a == b) is true when a is equal to b ([concepts.equality]), and false otherwise.

[ Note: The requirement that the expression a == b is equality-preserving implies that == is transitive and symmetric. — end note ]