std::experimental::ranges::Boolean
定義於標頭檔案 <experimental/ranges/concepts> |
||
template< class B > concept bool Boolean = |
(ranges TS) | |
概念 Boolean
指定了型別在布林上下文中使用時的要求。為了滿足 Boolean
,邏輯運算子必須具有通常的行為(包括短路)。更確切地說,給定
-
b1
,b2
,兩個型別為 const std::remove_reference_t<B> 的左值,
Boolean
僅在以下條件滿足時成立:
- 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 中使用的每個表示式都必須保持相等且穩定,並且表示式的評估只能修改其非常量運算元。常量運算元不得修改。
[編輯] 隱式表示式變體
一個使用對於某個常量左值運算元是**非修改性**的表示式的 *requires-expression*,也隱式要求該表示式的額外變體接受**非常量左值**或(可能是常量的)**右值**作為給定運算元,除非明確要求具有不同語義的此類表示式變體。這些 *隱式表示式變體* 必須滿足所宣告表示式的相同語義要求。實現驗證這些變體語法的程度是未指定的。
[編輯] 注意
Boolean
型別的示例包括 bool, std::true_type 和 std::bitset<N>::reference。指標不是 Boolean
型別。
形式為 { expression } -> Same<T>&& 的推導約束有效地要求 decltype((expression))&& 必須與 T&&
完全相同。這約束了表示式的型別及其值類別。