A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://en.cppreference.com/w/cpp/language/../../cpp/utility/expected/unexpected.html below:

std::unexpected - cppreference.com

template< class E >
class unexpected;

(since C++23)

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.

[edit] Template parameters E - the type of the unexpected value. The type must not be an array type, a non-object type, a specialization of std::unexpected, or a cv-qualified type. [edit] Member functions constructs the unexpected object
(public member function)

(destructor)

(implicitly declared)

destroys the unexpected object, along with the stored value
(public member function)

operator=

(implicitly declared)

assigns the stored value
(public member function) accesses the stored value
(public member function) swaps the stored value
(public member function) [edit] Non-member functions 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) (5)

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 Exceptions

Throws any exception thrown by the constructor of E.

std::unexpected::error constexpr const E& error() const& noexcept;

constexpr E& error() & noexcept;
constexpr const E&& error() const&& noexcept;

constexpr E&& error() && noexcept;

Returns a reference to the stored value.

std::unexpected::swap

Swaps 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.

swap(std::unexpected)

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.

[edit] Deduction guides

template< class E >
unexpected(E) -> unexpected<E>;

(since C++23)

The deduction guide is provided for unexpected to allow deduction from the constructor argument.

[edit] Notes

Prior 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