std::experimental::ranges::is_swappable_with, std::experimental::ranges::is_swappable, std::experimental::ranges::is_nothrow_swappable_with, std::experimental::ranges::is_nothrow_swappable
來自 cppreference.com
template< class T, class U > struct is_swappable_with; |
(1) | (ranges TS) |
template< class T > struct is_swappable; |
(2) | (ranges TS) |
template< class T, class U > struct is_nothrow_swappable_with; |
(3) | (ranges TS) |
template< class T > struct is_nothrow_swappable; |
(4) | (ranges TS) |
1) 如果表示式 ranges::swap(std::declval<T>(), std::declval<U>()) 和 ranges::swap(std::declval<U>(), std::declval<T>()) 在被視為未求值運算元時都格式良好,則提供成員常量
value
等於 true。否則,value
為 false。訪問檢查的執行就好像是在與這兩種型別都無關的上下文中進行的。2) 如果
T
不是可引用型別(即可能是 cv 限定的 void 或帶有 cv 限定符序列 或 引用限定符 的函式型別),則提供成員常量 value
等於 false。否則,提供成員常量 value
等於 ranges::is_swappable_with<T&, T&>::value。3) 與 (1) 相同,但是已知 (1) 中的兩個表示式的求值不會丟擲異常。
4) 與 (2) 相同,但是使用 is_nothrow_swappable_with。
T
和 U
均應為完整型別、(可能是 cv 限定的)void,或未知邊界的陣列。否則,行為是未定義的。
目錄 |
[編輯] 輔助變數模板
template< class T, class U > constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value; |
(1) | (ranges TS) |
template< class T > constexpr bool is_swappable_v = is_swappable<T>::value; |
(2) | (ranges TS) |
template< class T, class U > constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value; |
(3) | (ranges TS) |
template< class T > constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value; |
(4) | (ranges TS) |
繼承自 std::integral_constant
成員常量
value [靜態] |
true 如果 T 可以與 U 交換,否則為 false(public static 成員常量) |
成員函式
operator bool |
將物件轉換為 bool,返回 value (公開成員函式) |
operator() (C++14) |
返回 value (公開成員函式) |
成員型別
型別 | 定義 |
value_type
|
bool |
型別
|
std::integral_constant<bool, value> |
[編輯] 注意
此特性不檢查交換表示式的直接上下文之外的任何內容:如果使用 T
或 U
會觸發模板特化、隱式定義的特殊成員函式的生成等,並且這些有錯誤,那麼即使 ranges::is_swappable_with<T,U>::value
編譯並求值為 true,實際的交換也可能無法編譯。
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 參閱
指定型別可以被交換,或者兩種型別可以互相交換 (概念) | |
(C++17)(C++17)(C++17)(C++17) |
檢查一種型別的物件是否可以與相同或不同型別的物件進行交換 (類模板) |