std::expected<T,E>::expected
Main template |
||
constexpr expected(); |
(1) | (since C++23) |
constexpr expected( const expected& other );
|
(2) | (since C++23) |
constexpr expected( expected&& other )
noexcept
(
/* see below */
)
;
|
(3) | (since C++23) |
template
<
class U, class G >
constexpr expected( const expected<U, G> & other ) ; |
(4) | (since C++23) (conditionally explicit) |
template
<
class U, class G >
constexpr expected( expected<U, G> && other ) ; |
(5) | (since C++23) (conditionally explicit) |
template
<
class U = T >
constexpr explicit ( ! std::is_convertible_v <U, T> ) expected( U&& v ) ; |
(6) | (since C++23) |
template
<
class G >
constexpr
explicit
(
!
std::is_convertible_v
<
const G&, E>
)
|
(7) | (since C++23) |
template
<
class G >
constexpr
explicit
(
!
std::is_convertible_v
<G, E>
)
|
(8) | (since C++23) |
template
<
class... Args
>
constexpr explicit expected( std::in_place_t, Args&&... args ) ; |
(9) | (since C++23) |
template
<
class U, class... Args
>
constexpr explicit |
(10) | (since C++23) |
template
<
class... Args
>
constexpr explicit expected( std::unexpect_t, Args&&... args ) ; |
(11) | (since C++23) |
template
<
class U, class... Args
>
constexpr explicit |
(12) | (since C++23) |
void partial specialization |
||
constexpr expected(); |
(13) | (since C++23) |
constexpr expected( const expected& other );
|
(14) | (since C++23) |
constexpr expected( expected&& other )
noexcept ( std::is_nothrow_move_constructible_v <E> ) ; |
(15) | (since C++23) |
template
<
class U, class G >
constexpr
explicit
(
!
std::is_convertible_v
<
const G&, E>
)
|
(16) | (since C++23) |
template
<
class U, class G >
constexpr
explicit
(
!
std::is_convertible_v
<G, E>
)
|
(17) | (since C++23) |
template
<
class G >
constexpr
explicit
(
!
std::is_convertible_v
<
const G&, E>
)
|
(18) | (since C++23) |
template
<
class G >
constexpr
explicit
(
!
std::is_convertible_v
<G, E>
)
|
(19) | (since C++23) |
template
<
class... Args
>
constexpr explicit expected( std::in_place_t ) ; |
(20) | (since C++23) |
template
<
class... Args
>
constexpr explicit expected( std::unexpect_t, Args&&... args ) ; |
(21) | (since C++23) |
template
<
class U, class... Args
>
constexpr explicit |
(22) | (since C++23) |
Constructs a new expected
object.
Parameters
other | - | another expected object whose contained value is copied
|
e | - | std::unexpected object whose contained value is copied
|
v | - | value with which to initialize the contained value |
args | - | arguments with which to initialize the contained value |
il | - | initializer list with which to initialize the contained value |
Effects
Primary template constructors
Overload | Initialization method |
Initializer for... | has_value() after construction |
|
---|---|---|---|---|
the expected value | the unexpected value | |||
(1) | Value | (empty) | - | true |
(2) | Direct (non-list) |
*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 partial specialization constructors
Overload | Initialization method | Initializer for the unexpected value | has_value() after construction
|
---|---|---|---|
(13) | N/A | - | true |
(14) | Direct (non-list) | 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) | N/A | - | true |
(21) | Direct (non-list) | std::forward <Args> (args) | false |
(22) | il, std::forward <Args> (args) |
Constraints and supplement information
Primary template constructors
- For overload (4), std::is_constructible_v <T, const U& > and std::is_constructible_v <E, const G& > are both true
- For overload (5), std::is_constructible_v<T, U> and std::is_constructible_v<E, G> are both true
- If
T
is not (possibly cv-qualified) bool, the following 8 values are all 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>
- The following 4 values are all 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 > is false
- std::is_same_v < std::expected <T, E>, std::remove_cvref_t <U>> is false
- std::is_constructible_v<T, U> is true
-
std::remove_cvref_t<U> is not a specialization of
std::unexpected
- If
T
is (possibly cv-qualified) bool, std::remove_cvref_t<U> is not a specialization ofstd::expected
void partial specialization constructors
- For overload (16), std::is_constructible_v <E, const G& > is true
- For overload (17), std::is_constructible_v<E, G> is true
- std::is_void_v<U> is true
- The following 4 values are all 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>>
Exceptions
Primary template constructors
&& std::is_nothrow_move_constructible_v <E> )
void partial specialization constructors
Example
This section is incomplete Reason: no example |
See also
(C++23)
|
represented as an unexpected value (class template) |
in-place construction tag (tag) |
|
(C++23)
|
in-place construction tag for unexpected value in expected (tag) |