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) | (library fundamentals TS v3) |
|
scope_fail
(
scope_fail
&&
other
)
noexcept
(
/*see below*/
)
;
|
(2) | (library fundamentals TS v3) |
|
scope_fail
(
const
scope_fail
&
)
=
delete
;
|
(3) | (library 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
неактивным
(публичная функция-член) |