template< class E >
class unexpected;
The class template std::unexpected
represents an unexpected value stored in std::expected. In particular, std::expected has constructors with std::unexpected
as a single argument, which creates an expected
object that contains an unexpected value.
A program is ill-formed if it instantiates an unexpected
with a non-object type, an array type, a specialization of std::unexpected
, or a cv-qualified type.
std::unexpected
, or a cv-qualified type. [edit] Member functions constructs the unexpected
object
(destructor)
(implicitly declared)
destroys theunexpected
object, along with the stored value
operator=
(implicitly declared)
assigns the stored valueconstexpr unexpected( const unexpected& ) = default;
(1)constexpr unexpected( unexpected&& ) = default;
(2)template< class Err = E >
constexpr explicit unexpected( Err&& e );
Constructs a std::unexpected
object.
1,2) Copy/move constructor. Copies or moves the stored value, respectively.
Parameters e - 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 ExceptionsThrows any exception thrown by the constructor of E
.
constexpr E& error() & noexcept;
constexpr const E&& error() const&& noexcept;
Returns a reference to the stored value.
std::unexpected::swapSwaps the stored values, as if by using std::swap; swap(error(), other.error());.
The program is ill-formed if std::is_swappable_v<E> is false.
operator==(std::unexpected)template< class E2 >
friend constexpr bool operator==( unexpected& x, std::unexpected<E2>& y );
Compares the stored values, as if by return x.error() == y.error().
If the expression x.error() == e.error() is not well-formed, or if its result is not convertible to bool, the program is ill-formed.
This function is not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::unexpected<E>
is an associated class of the arguments.
friend constexpr void
swap( unexpected& x, unexpected& y ) noexcept(noexcept(x.swap(y)));
Equivalent to x.swap(y).
This overload participates in overload resolution only if std::is_swappable_v<E> is true.
This function is not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::unexpected<E>
is an associated class of the arguments.
template< class E >
unexpected(E) -> unexpected<E>;
The deduction guide is provided for unexpected to allow deduction from the constructor argument.
[edit] NotesPrior to C++17, the name std::unexpected denoted the function called by the C++ runtime when a dynamic exception specification was violated.
[edit] Example#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 contains an error value\n"; if (ex == std::unexpected(3)) std::cout << "The error value is equal to 3\n"; const auto e = unexpected_runtime_error(); e.and_then([](const auto& e) -> std::expected<int, error> { std::cout << "and_then: " << int(e); // not printed return {}; }) .or_else([](const auto& e) -> std::expected<int, error> { std::cout << "or_else: " << int(e); // prints this line return {}; }); }
Output:
ex contains an error value The error value is equal to 3 or_else: 1[edit] See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4