std::experimental::ranges:: swap
|
ヘッダーで定義
<experimental/ranges/utility>
|
||
|
namespace
{
constexpr
/* unspecified */
swap
=
/* unspecified */
;
|
(ranges TS)
(カスタマイゼーションポイントオブジェクト) |
|
|
呼び出しシグネチャ
|
||
|
template
<
class
T,
class
U
>
requires
/* see below */
|
||
t と u が参照する値を交換します。
ranges::swap
への呼び出しは以下と等価です:
- template < class T > void swap ( T & , T & ) = delete ;
- template < class T, std:: size_t N > void swap ( T ( & ) [ N ] , T ( & ) [ N ] ) = delete ;
-
実引数依存の名前探索
によって発見された
swapのあらゆる宣言。
T
と
U
が等しいサイズの配列型(要素型が異なる可能性あり)への左辺値参照であり、かつ
ranges::
swap
(
*
t,
*
u
)
が有効な式である場合に限る。
T
と
U
がともに何らかの型
V
に対する
V&
であり、かつ
MoveConstructible
<
V
>
および
Assignable
<
V
&
, V
>
の構文要件を満たす場合、参照される値を
V v
{
std
::
move
(
t
)
}
;
t
=
std
::
move
(
u
)
;
u
=
std
::
move
(
v
)
;
によって交換する。いずれかの概念の意味要件が満たされない場合、プログラムは不適格であり、診断は不要である。
ranges::swap
の呼び出しは不適格となる。
ranges:: swap は、それが呼び出すすべての関数(上記で規定されている通り)が定数式で使用可能である場合、定数式で使用できます。
目次 |
カスタマイゼーションポイントオブジェクト
名前
ranges::swap
は
カスタマイゼーションポイントオブジェクト
を表し、これは
関数オブジェクト
であり、
リテラル
Semiregular
クラス型(説明の目的で
SwapT
と表記)のオブジェクトです。
SwapT
のすべてのインスタンスは等価です。したがって、
ranges::swap
は自由にコピーでき、そのコピーは互換的に使用できます。
型の集合
Args...
が与えられたとき、
std::
declval
<
Args
>
(
)
...
が上記の
ranges::swap
の引数要件を満たす場合、
SwapT
は
ranges
::
Invocable
<
const
SwapT, Args...
>
を満たす。そうでない場合、
SwapT
の関数呼び出し演算子はオーバーロード解決に参加しない。
翻訳単位ごとに定義される
ranges::swap
は、同一のカスタマイゼーションポイントオブジェクトのインスタンスを参照します。(これは、インライン関数や関数テンプレート内で自由に使用でき、
One Definition Rule
に違反しないことを意味します。)
例外
swap
は前述の方法で検索されるものとする。
std:: is_nothrow_move_assignable < V > :: value )
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
2つのオブジェクトの値を交換する
(関数テンプレート) |