std::experimental::ranges::is_swappable_with、std::experimental::ranges::is_swappable、std::experimental::ranges::is_nothrow_swappable_with、std::experimental::ranges::is_nothrow_swappable
From cppreference.com
< cpp | experimental | ranges
| Defined in header <experimental/ranges/type_traits> |
||
| 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>()) が、評価されないオペランドとして扱われた場合に、両方ともwell-formedである場合、メンバ定数
valueは true になります。それ以外の場合、valueは false になります。アクセスチェックは、どちらの型とも無関係なコンテキストから行われるものとして実行されます。2)
Tが参照可能な型でない場合(すなわち、cv修飾されたvoidまたはcv-qualifier-seqまたはref-qualifierを持つ関数型である場合)、メンバ定数valueは false になります。それ以外の場合、メンバ定数valueは ranges::is_swappable_with<T&, T&>::value になります。3) (1) と同じですが、(1) の両方の式の評価は例外を投げないことがわかっています。
4) (2) と同じですが、is_nothrow_swappable_with を使用します。
T および U はそれぞれcomplete type、(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 [static] |
T が U とスワップ可能であれば true、そうでなければ false(公開静的メンバ定数) |
メンバ関数
| operator bool |
オブジェクトを bool に変換し、value を返します。 (public member function) |
| operator() (C++14) |
value を返します。 (public member function) |
メンバ型
| 型 | 定義 |
value_type
|
bool |
type
|
std::integral_constant<bool, value> |
[編集] 注記
このトレイトは、スワップ式の直接的なコンテキスト以外をチェックしません。T または U の使用がテンプレート特殊化、暗黙定義された特殊メンバ関数の生成などをトリガーし、それらにエラーがある場合、ranges::is_swappable_with<T,U>::value がコンパイルされ true と評価されたとしても、実際のスワップはコンパイルされない可能性があります。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 関連項目
| 型が交換可能であること、または2つの型が互いに交換可能であることを規定する (concept) | |
| (C++17)(C++17)(C++17)(C++17) |
型のオブジェクトが同じまたは異なる型のオブジェクトとスワップ可能であるかをチェックする (クラステンプレート) |