Namespaces
Variants

std::experimental::ranges:: WeaklyEqualityComparableWith

From cppreference.net
template < class T, class U >

concept bool WeaklyEqualityComparableWith =
requires ( const std:: remove_reference_t < T > & t,
const std:: remove_reference_t < U > & u ) {
{ t == u } - > Boolean && ;
{ t ! = u } - > Boolean && ;
{ u == t } - > Boolean && ;
{ u ! = t } - > Boolean && ;

} ;
(范围 TS)

概念 WeaklyEqualityComparableWith<T, U> 规定类型 T 的对象和类型 U 的对象可以使用 == != 相互比较(以任意顺序),且比较结果具有一致性。更正式地说,仅当满足以下条件时 WeaklyEqualityComparableWith<T, U> 才被满足:

以下情况为真:

  • t == u , u == t , t ! = u , u ! = t 具有相同的定义域;
  • bool ( u == t ) == bool ( t == u )
  • bool ( t ! = u ) == ! bool ( t == u ) ;以及
  • bool ( u ! = t ) == bool ( t ! = u )

等值保持性

表达式若在给定相等输入时产生相等输出,则称其具有 等值保持性

  • 表达式的输入由其操作数构成。
  • 表达式的输出由其结果及所有被该表达式修改的操作数(如有)构成。

每个要求保持相等性的表达式还必须满足 稳定性 要求:对此类表达式进行两次求值时,若输入对象相同且期间未显式修改这些输入对象,则必须产生相等的输出结果。

除非另有说明,每个在 要求表达式 中使用的表达式都必须保持相等性且稳定,且该表达式的求值只能修改其非常量操作数。常量操作数不得被修改。

隐式表达式变体

一个使用对某个常量左值操作数进行非修改性表达式的 requires表达式 ,会隐式要求该表达式存在接受非常量左值或(可能为常量的)右值的附加变体,除非已通过具有不同语义的显式要求排除了这类表达式变体。这些 隐式表达式变体 必须满足声明表达式的相同语义要求。实现对这些变体语法验证的程度由实现定义。

另请参阅

指定 == 运算符为等价关系
(概念)