std::experimental::ranges:: Boolean
|
template
<
class
B
>
concept
bool
Boolean
=
|
(范围 TS) | |
概念
Boolean<B>
规定了可在布尔上下文中使用的类型所需满足的要求。要满足
Boolean
要求,逻辑运算符必须具有常规行为(包括短路求值)。更准确地说,给定
-
b1,b2,两个类型为 const std:: remove_reference_t < B > 的左值,
Boolean<B>
仅在以下条件满足时成立:
- bool ( b1 ) == ! bool ( ! b1 ) ;
- b1 && b2 、 b1 && bool ( b2 ) 与 bool ( b1 ) && b2 均等价于 bool ( b1 ) && bool ( b2 ) ,且具有相同的短路求值特性;
- b1 || b2 、 b1 || bool ( b2 ) 与 bool ( b1 ) || b2 均等价于 bool ( b1 ) || bool ( b2 ) ,且具有相同的短路求值特性;
- bool ( b1 == b2 ) 、 bool ( b1 == bool ( b2 ) ) 及 bool ( bool ( b1 ) == b2 ) 均等价于 ( bool ( b1 ) == bool ( b2 ) ) ;
- bool ( b1 ! = b2 ) 、 bool ( b1 ! = bool ( b2 ) ) 及 bool ( bool ( b1 ) ! = b2 ) 均等价于 ( bool ( b1 ) ! = bool ( b2 ) ) 。
等值保持性
表达式若在给定相等输入时产生相等输出,则称其具有 等值保持性 。
- 表达式的输入由其操作数构成。
- 表达式的输出由其结果及所有被该表达式修改的操作数(如有)构成。
每个要求保持相等性的表达式还必须满足 稳定性 要求:对此类表达式进行两次求值,若输入对象相同,则输出结果必须相等,除非其间显式修改了这些输入对象。
除非另有说明,每个在 要求表达式 中使用的表达式都必须保持相等性且稳定,且该表达式的求值只能修改其非常量操作数。常量操作数不得被修改。
隐式表达式变体
一个使用对某个常量左值操作数进行非修改性表达式的 requires-expression ,也会隐式要求接受该操作数的非常量左值或(可能为常量的)右值的该表达式的额外变体,除非这样的表达式变体已通过具有不同语义的方式被显式要求。这些 隐式表达式变体 必须满足所声明表达式的相同语义要求。实现对这些变体语法验证的程度是未指定的。
注释
布尔类型的示例包括 bool 、 std:: true_type 和 std:: bitset < N > :: reference 。指针不属于布尔类型。
形如
{
expression
}
-
>
Same
<
T
>
&&
的推导约束实际上要求
decltype
(
(
expression
)
)
&&
必须与
T&&
完全相同的类型。这同时约束了表达式的类型及其值类别。