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.net
<
cpp
|
experimental
|
ranges
|
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
が参照可能な型でない場合(すなわち、修飾された可能性のある
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
はそれぞれ完全型、(場合によっては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]
|
true
(
T
が
U
と交換可能な場合)、
false
(それ以外の場合)
(public static member constant) |
メンバ関数
|
operator bool
|
オブジェクトを
bool
に変換し、
value
を返す
(public member function) |
|
operator()
(C++14)
|
value
を返す
(public member function) |
メンバ型
| 型 | 定義 |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
注記
この特性はswap式の直接的なコンテキスト外のチェックは行いません:
T
または
U
の使用がテンプレート特殊化、暗黙的に定義される特殊メンバ関数の生成などを引き起こし、それらにエラーがある場合、
ranges::is_swappable_with<T,U>::value
がコンパイルされ
true
と評価される場合でも、実際のswapはコンパイルに失敗する可能性があります。
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
型が交換可能であること、または2つの型が互いに交換可能であることを指定する
(コンセプト) |
|
|
(C++17)
(C++17)
(C++17)
(C++17)
|
型のオブジェクトが同じ型または異なる型のオブジェクトと交換可能かどうかをチェックする
(クラステンプレート) |