std::expected<T,E>:: expected
|
Основной шаблон
|
||
|
constexpr
expected
(
)
;
|
(1) | (начиная с C++23) |
|
constexpr
expected
(
const
expected
&
other
)
;
|
(2) | (начиная с C++23) |
|
constexpr
expected
(
expected
&&
other
)
noexcept
(
/* см. ниже */
)
;
|
(3) | (начиная с C++23) |
|
template
<
class
U,
class
G
>
constexpr expected ( const expected < U, G > & other ) ; |
(4) |
(начиная с C++23)
(условно явный) |
|
template
<
class
U,
class
G
>
constexpr expected ( expected < U, G > && other ) ; |
(5) |
(начиная с C++23)
(условно явный) |
|
template
<
class
U
=
std::
remove_cv_t
<
T
>
>
constexpr explicit ( ! std:: is_convertible_v < U, T > ) expected ( U && v ) ; |
(6) | (начиная с C++23) |
|
template
<
class
G
>
constexpr
explicit
(
!
std::
is_convertible_v
<
const
G
&
, E
>
)
|
(7) | (начиная с C++23) |
|
template
<
class
G
>
constexpr
explicit
(
!
std::
is_convertible_v
<
G, E
>
)
|
(8) | (начиная с C++23) |
|
template
<
class
...
Args
>
constexpr explicit expected ( std:: in_place_t , Args && ... args ) ; |
(9) | (начиная с C++23) |
|
template
<
class
U,
class
...
Args
>
constexpr
explicit
|
(10) | (начиная с C++23) |
|
template
<
class
...
Args
>
constexpr explicit expected ( std:: unexpect_t , Args && ... args ) ; |
(11) | (начиная с C++23) |
|
template
<
class
U,
class
...
Args
>
constexpr
explicit
|
(12) | (начиная с C++23) |
|
void
частичная специализация
|
||
|
constexpr
expected
(
)
;
|
(13) | (начиная с C++23) |
|
constexpr
expected
(
const
expected
&
other
)
;
|
(14) | (начиная с C++23) |
|
constexpr
expected
(
expected
&&
other
)
noexcept ( std:: is_nothrow_move_constructible_v < E > ) ; |
(15) | (начиная с C++23) |
|
template
<
class
U,
class
G
>
constexpr
explicit
(
!
std::
is_convertible_v
<
const
G
&
, E
>
)
|
(16) | (начиная с C++23) |
|
template
<
class
U,
class
G
>
constexpr
explicit
(
!
std::
is_convertible_v
<
G, E
>
)
|
(17) | (начиная с C++23) |
|
template
<
class
G
>
constexpr
explicit
(
!
std::
is_convertible_v
<
const
G
&
, E
>
)
|
(18) | (начиная с C++23) |
|
template
<
class
G
>
constexpr
explicit
(
!
std::
is_convertible_v
<
G, E
>
)
|
(19) | (начиная с C++23) |
|
constexpr
explicit
expected
(
std::
in_place_t
)
;
|
(20) | (начиная с C++23) |
|
template
<
class
...
Args
>
constexpr explicit expected ( std:: unexpect_t , Args && ... args ) ; |
(21) | (начиная с C++23) |
|
template
<
class
U,
class
...
Args
>
constexpr
explicit
|
(22) | (начиная с C++23) |
Создает новый объект
expected
.
Содержание |
Параметры
| other | - |
другой
expected
объект, чьё содержащееся значение копируется
|
| e | - |
std::unexpected
объект, чьё содержащееся значение копируется
|
| v | - | значение, используемое для инициализации содержащегося значения |
| args | - | аргументы, используемые для инициализации содержащегося значения |
| il | - | список инициализации, используемый для инициализации содержащегося значения |
Эффекты
Конструкторы первичного шаблона
| Перегрузка |
Способ
инициализации |
Инициализатор для... |
has_value()
после конструирования |
|
|---|---|---|---|---|
| ожидаемое значение | неожиданное значение | |||
| ( 1 ) | Значение | (пусто) | - | true |
| ( 2 ) |
Прямая
(не-список) |
* other | other. error ( ) |
other.
has_value
(
)
|
| ( 3 ) | std :: move ( * other ) | std :: move ( other. error ( ) ) | ||
| ( 4 ) |
std::
forward
<
const
U
&
>
( * other ) |
std::
forward
<
const
G
&
>
( other. error ( ) ) |
||
| ( 5 ) | std:: forward < U > ( * other ) |
std::
forward
<
G
>
( other. error ( ) ) |
||
| ( 6 ) | std:: forward < U > ( v ) | - | true | |
| ( 7 ) | - |
std::
forward
<
const
G
&
>
( e. error ( ) ) |
false | |
| ( 8 ) | std:: forward < G > ( e. error ( ) ) | |||
| ( 9 ) | std:: forward < Args > ( args ) ... | - | true | |
| ( 10 ) |
il,
std:: forward < Args > ( args ) ... |
|||
| ( 11 ) | - | std:: forward < Args > ( args ) ... | false | |
| ( 12 ) |
il,
std:: forward < Args > ( args ) ... |
|||
void конструкторы частичной специализации
| Перегрузка | Метод инициализации | Инициализатор для unexpected значения |
has_value()
после конструирования
|
|---|---|---|---|
| ( 13 ) | Н/Д | - | true |
| ( 14 ) | Прямая (не списковая) | rhs. error ( ) |
other.
has_value
(
)
|
| ( 15 ) | std :: move ( rhs. error ) | ||
| ( 16 ) | std:: forward < const G & > ( rhs. error ( ) ) | ||
| ( 17 ) | std:: forward < G > ( rhs. error ( ) ) | ||
| ( 18 ) | std:: forward < const G & > ( e. error ( ) ) | false | |
| ( 19 ) | std:: forward < G > ( e. error ( ) ) | ||
| ( 20 ) | Н/Д | - | true |
| ( 21 ) | Прямая (не списковая) | std:: forward < Args > ( args ) ... | false |
| ( 22 ) | il, std:: forward < Args > ( args ) ... |
Ограничения и дополнительная информация
Конструкторы первичного шаблона
- Для перегрузки (4) , std:: is_constructible_v < T, const U & > и std:: is_constructible_v < E, const G & > оба равны true .
- Для перегрузки (5) , std:: is_constructible_v < T, U > и std:: is_constructible_v < E, G > оба равны true .
-
Если
Tне является (возможно, cv-квалифицированным) bool , следующие 8 значений равны false :- std:: is_constructible_v < T, std:: expected < U, G > & >
- std:: is_constructible_v < T, std:: expected < U, G >>
- std:: is_constructible_v < T, const std:: expected < U, G > & >
- std:: is_constructible_v < T, const std:: expected < U, G >>
- std:: is_convertible_v < std:: expected < U, G > & , T >
- std:: is_convertible_v < std:: expected < U, G > , T >
- std:: is_convertible_v < const std:: expected < U, G > & , T >
- std:: is_convertible_v < const std:: expected < U, G > , T >
-
Следующие 4 значения являются
false
:
- std:: is_constructible_v < std:: unexpected < E > , std:: expected < U, G > & >
- std:: is_constructible_v < std:: unexpected < E > , std:: expected < U, G >>
- std:: is_constructible_v < std:: unexpected < E > , const std:: expected < U, G > & >
- std:: is_constructible_v < std:: unexpected < E > , const std:: expected < U, G >>
- std:: is_same_v < std:: remove_cvref_t < U > , std:: in_place_t > равно false .
- std:: is_same_v < std:: expected < T, E > , std:: remove_cvref_t < U >> равно false .
- std:: is_constructible_v < T, U > равно true .
-
std::
remove_cvref_t
<
U
>
не является специализацией
std::unexpected. -
Если
Tявляется (возможно, cv-квалифицированным) bool , std:: remove_cvref_t < U > не является специализациейstd::expected.
void конструкторы частичной специализации
- Для перегрузки (16) , std:: is_constructible_v < E, const G & > равно true .
- Для перегрузки (17) , std:: is_constructible_v < E, G > равно true .
- std:: is_void_v < U > равно true .
-
Следующие 4 значения все равны
false
:
- std:: is_constructible_v < std:: unexpected < E > , std:: expected < U, G > & >
- std:: is_constructible_v < std:: unexpected < E > , std:: expected < U, G >>
- std:: is_constructible_v < std:: unexpected < E > , const std:: expected < U, G > & >
- std:: is_constructible_v < std:: unexpected < E > , const std:: expected < U, G >>
Исключения
Конструкторы первичного шаблона
&& std:: is_nothrow_move_constructible_v < E > )
void конструкторы частичной специализации
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 3886 | C++23 |
аргумент шаблона по умолчанию для перегрузки
(
6
)
был
T
|
изменён на std:: remove_cv_t < T > |
Смотрите также
|
(C++23)
|
представлен как неожиданное значение
(шаблон класса) |
|
тег для конструирования на месте
(тег) |
|
|
(C++23)
|
тег для конструирования на месте неожиданного значения в
expected
(тег) |