std:: unexpected
|
Определено в заголовочном файле
<expected>
|
||
|
template
<
class
E
>
class unexpected ; |
(начиная с C++23) | |
Шаблон класса
std::unexpected
представляет неожиданное значение, хранящееся в
std::expected
. В частности,
std::expected
имеет конструкторы с
std::unexpected
в качестве единственного аргумента, которые создают объект
expected
, содержащий неожиданное значение.
Программа является некорректной, если она инстанцирует
unexpected
с не-объектным типом, типом массива, специализацией
std::unexpected
или cv-квалифицированным типом.
Содержание |
Параметры шаблона
| E | - |
тип неожиданного значения. Тип не должен быть массивом, не-объектным типом, специализацией
std::unexpected
или типом с cv-квалификаторами.
|
Функции-члены
конструирует объект
unexpected
(public member function) |
|
|
(destructor)
(implicitly declared)
|
уничтожает объект
unexpected
вместе с сохранённым значением
(public member function) |
|
operator=
(implicitly declared)
|
присваивает сохранённое значение
(public member function) |
|
получает доступ к сохранённому значению
(public member function) |
|
|
обменивает сохранённые значения
(public member function) |
Функции, не являющиеся членами класса
|
(C++23)
|
сравнивает хранимое значение
(шаблон функции) |
|
(C++23)
|
специализирует алгоритм
std::swap
(шаблон функции) |
std::unexpected:: unexpected
|
constexpr
unexpected
(
const
unexpected
&
)
=
default
;
|
(1) | |
|
constexpr
unexpected
(
unexpected
&&
)
=
default
;
|
(2) | |
|
template
<
class
Err
=
E
>
constexpr explicit unexpected ( Err && e ) ; |
(3) | |
|
template
<
class
...
Args
>
constexpr explicit unexpected ( std:: in_place_t , Args && ... args ) ; |
(4) | |
|
template
<
class
U,
class
...
Args
>
constexpr
explicit
unexpected
(
std::
in_place_t
,
|
(5) | |
Создает объект
std::unexpected
.
E
из
std::
forward
<
Err
>
(
e
)
.
-
Эта перегрузка участвует в разрешении перегрузки только если
- std:: is_same_v < std:: remove_cvref_t < Err > , unexpected > ложно, и
- std:: is_same_v < std:: remove_cvref_t < Err > , std:: in_place_t > ложно, и
- std:: is_constructible_v < E, Err > истинно.
E
из аргументов
std::
forward
<
Args
>
(
args
)
...
.
- Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, Args... > равно true.
E
из аргументов
il,
std::
forward
<
Args
>
(
args
)
...
.
- Эта перегрузка участвует в разрешении перегрузки только если std:: is_constructible_v < E, std:: initializer_list < U > & , Args... > истинно.
Параметры
| e | - | значение, которым инициализируется содержащееся значение |
| args... | - | аргументы, которыми инициализируется содержащееся значение |
| il | - | список инициализации, которым инициализируется содержащееся значение |
Исключения
Выбрасывает любое исключение, выбрасываемое конструктором
E
.
std::unexpected:: error
|
constexpr
const
E
&
error
(
)
const
&
noexcept
;
constexpr
E
&
error
(
)
&
noexcept
;
|
||
Возвращает ссылку на сохраненное значение.
std::unexpected:: swap
|
constexpr
void
swap
(
unexpected
&
other
)
noexcept
(
std::
is_nothrow_swappable_v
<
E
>
)
;
|
||
Обменивает сохраненные значения, как если бы с помощью using std:: swap ; swap ( error ( ) , other. error ( ) ) ; .
Программа является некорректной, если std:: is_swappable_v < E > имеет значение false.
operator== (std::unexpected)
|
template
<
class
E2
>
friend constexpr bool operator == ( unexpected & x, std :: unexpected < E2 > & y ) ; |
||
Сравнивает хранимые значения, как если бы return x. error ( ) == y. error ( ) .
Если выражение x. error ( ) == e. error ( ) не является корректно сформированным, или если его результат не конвертируется в bool , программа является некорректной.
Эта функция не видна при обычном
неквалифицированном поиске
или
квалифицированном поиске
, и может быть найдена только с помощью
поиска, зависимого от аргументов
, когда
std::unexpected<E>
является ассоциированным классом аргументов.
swap (std::unexpected)
|
friend
constexpr
void
swap ( unexpected & x, unexpected & y ) noexcept ( noexcept ( x. swap ( y ) ) ) ; |
||
Эквивалентно x. swap ( y ) .
Эта перегрузка участвует в разрешении перегрузки только если std:: is_swappable_v < E > равно true.
Эта функция не видна для обычного
неквалифицированного
или
квалифицированного поиска
и может быть найдена только с помощью
поиска, зависимого от аргументов
, когда
std::unexpected<E>
является ассоциированным классом аргументов.
Руководства по выводу типа
|
template
<
class
E
>
unexpected ( E ) - > unexpected < E > ; |
(начиная с C++23) | |
Для deduction guide предоставлен для unexpected чтобы разрешить выведение из аргумента конструктора.
Примечания
До C++17, имя std::unexpected обозначало функцию, вызываемую средой выполнения C++ при нарушении динамической спецификации исключений.
Пример
#include <expected> #include <iostream> enum class error { compile_time_error, runtime_error }; [[nodiscard]] auto unexpected_runtime_error() -> std::expected<int, error> { return std::unexpected(error::runtime_error); } int main() { std::expected<double, int> ex = std::unexpected(3); if (!ex) std::cout << "ex содержит значение ошибки\n"; if (ex == std::unexpected(3)) std::cout << "Значение ошибки равно 3\n"; const auto e = unexpected_runtime_error(); e.and_then([](const auto& e) -> std::expected<int, error> { std::cout << "and_then: " << int(e); // не выводится return {}; }) .or_else([](const auto& e) -> std::expected<int, error> { std::cout << "or_else: " << int(e); // выводит эту строку return {}; }); }
Вывод:
ex содержит значение ошибки Значение ошибки равно 3 or_else: 1
Смотрите также
конструирует объект
expected
(public member function) |
|
|
возвращает ожидаемое значение
(public member function) |
|
|
обменивает содержимое
(public member function) |
|
|
(C++23)
|
специализирует алгоритм
std::swap
(function) |
|
(C++23)
|
сравнивает объекты
expected
(function template) |