std::experimental::scope_fail<EF>:: scope_fail
From cppreference.net
<
cpp
|
experimental
|
scope fail
|
template
<
class
Fn
>
explicit scope_fail ( Fn && fn ) noexcept ( /*see below*/ ) ; |
(1) | (라이브러리 fundamentals TS v3) |
|
scope_fail
(
scope_fail
&&
other
)
noexcept
(
/*see below*/
)
;
|
(2) | (라이브러리 fundamentals TS v3) |
|
scope_fail
(
const
scope_fail
&
)
=
delete
;
|
(3) | (라이브러리 fundamentals TS v3) |
함수, 함수 객체 또는 다른
scope_fail
으로부터
scope_fail
을 생성합니다.
1)
함수나 함수 객체로 종료 함수를 초기화하고,
std::
uncaught_exceptions
(
)
로 초기화된 것처럼 미처리 예외 카운터를 초기화합니다. 생성된
scope_fail
는 활성 상태입니다.
만약
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_fail
>
가
false
이고
std::
is_constructible_v
<
EF, Fn
>
가
true
인 경우입니다.
함수 호출 표현식
fn
(
)
가 잘못 형성된 경우 프로그램은 잘못 형성됩니다.
fn
(
)
호출이 예외를 발생시키거나 미정의 동작을 초래하는 경우, 심지어
fn
이 호출되지 않았더라도 동작은 미정의됩니다.
2)
이동 생성자. 저장된
EF
를
other
의 것으로 초기화하고, 미처리 예외 카운터를
other
의 것으로 초기화합니다. 생성된
scope_fail
는 생성 전
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_fail
|
예외
저장된
EF
의 초기화 과정에서 발생하는 모든 예외.
1)
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
(
std::
is_nothrow_move_constructible_v
<
EF
>
||
std:: is_nothrow_copy_constructible_v < EF > )
std:: is_nothrow_copy_constructible_v < EF > )
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |
참고 항목
|
(
removed in C++20*
)
(C++17)
|
예외 처리가 현재 진행 중인지 확인합니다
(함수) |
scope_fail
을 비활성화합니다
(public member function) |