std::experimental::scope_exit<EF>:: scope_exit
From cppreference.net
<
cpp
|
experimental
|
scope exit
|
template
<
class
Fn
>
explicit scope_exit ( Fn && fn ) noexcept ( /*see below*/ ) ; |
(1) | (ライブラリ基盤仕様 TS v3) |
|
scope_exit
(
scope_exit
&&
other
)
noexcept
(
/*see below*/
)
;
|
(2) | (ライブラリ基盤仕様 TS v3) |
|
scope_exit
(
const
scope_exit
&
)
=
delete
;
|
(3) | (ライブラリ基盤仕様 TS v3) |
関数、関数オブジェクト、または他の
scope_exit
から
scope_exit
を作成します。
1)
関数または関数オブジェクトで終了関数を初期化します。構築された
scope_exit
はアクティブ状態です。
Fn
がlvalue参照型ではなく、かつ
std::
is_nothrow_constructible_v
<
EF, Fn
>
が
true
の場合、保存される
EF
は
std::
forward
<
Fn
>
(
fn
)
で初期化される。それ以外の場合は
fn
で初期化される。
保存された
EF
の初期化が例外をスローした場合、
fn
(
)
を呼び出します。
このオーバーロードは、以下の条件が満たされる場合にのみオーバーロード解決に参加します:
std::
is_same_v
<
std::
remove_cvref_t
<
Fn
>
, scope_exit
>
が
false
であり、かつ
std::
is_constructible_v
<
EF, Fn
>
が
true
である場合です。
関数呼び出し式
fn
(
)
が不適格である場合、プログラムは不適格です。
fn
の呼び出しが例外をスローする場合、または未定義動作を引き起こす場合、たとえ
fn
が呼び出されていない場合でも、動作は未定義です。
2)
ムーブコンストラクタ。格納された
EF
を
other
内のもので初期化します。構築された
scope_exit
は、構築前に
other
がアクティブであった場合にのみアクティブになります。
std::
is_nothrow_move_constructible_v
<
EF
>
が
true
の場合、格納された
EF
(
exitfun
で示される)を
std::
forward
<
EF
>
(
other.
exitfun
)
で初期化し、それ以外の場合は
other.
exitfun
で初期化する。
正常にムーブ構築が完了した後、
other.
release
(
)
が呼び出され、
other
は非アクティブ状態になります。
このオーバーロードは、以下の条件のいずれかが満たされる場合にのみオーバーロード解決に参加します:
std::
is_nothrow_move_constructible_v
<
EF
>
が
true
であるか、または
std::
is_copy_constructible_v
<
EF
>
が
true
である場合です。
以下の場合、動作は未定義である:
-
std::
is_nothrow_move_constructible_v
<
EF
>
が
true
であり、かつ
EFが MoveConstructible の要件を満たさない場合、または -
std::
is_nothrow_move_constructible_v
<
EF
>
が
false
であり、かつ
EFが CopyConstructible の要件を満たさない場合。
目次 |
パラメータ
| fn | - |
格納される
EF
を初期化するために使用される関数または関数オブジェクト
|
| other | - |
scope_exit
からムーブする対象
|
例外
保存された
EF
の初期化中にスローされた例外。
1)
noexcept
noexcept指定:
noexcept
(
std::
is_nothrow_constructible_v
<
EF, Fn
>
||
std:: is_nothrow_constructible_v < EF, Fn & > )
std:: is_nothrow_constructible_v < EF, Fn & > )
2)
noexcept
noexcept指定:
noexcept
(
std::
is_nothrow_move_constructible_v
<
EF
>
||
std:: is_nothrow_copy_constructible_v < EF > )
std:: is_nothrow_copy_constructible_v < EF > )
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
scope_exit
を非アクティブにする
(公開メンバ関数) |