std::expected<T,E>::operator->, std::expected<T,E>::operator* - cppreference.com (original) (raw)

Primary template
constexpr const T* operator->() const noexcept; (1) (since C++23)
constexpr T* operator->() noexcept; (2) (since C++23)
constexpr const T& operator*() const& noexcept; (3) (since C++23)
constexpr T& operator*() & noexcept; (4) (since C++23)
constexpr const T&& operator*() const&& noexcept; (5) (since C++23)
constexpr T&& operator*() && noexcept; (6) (since C++23)
void partial specialization
constexpr void operator*() const noexcept; (7) (since C++23)

Accesses the expected value contained in *this.

1,2) Returns a pointer to the expected value.

3-6) Returns a reference to the expected value.

  1. Returns nothing.
If has_value() is false, the behavior is undefined. (until C++26)
If has_value() is false: If the implementation is hardened, a contract violation occurs. Moreover, if the contract-violation handler returns under “observe” evaluation semantic, the behavior is undefined. If the implementation is not hardened, the behavior is undefined. (since C++26)

[edit] Return value

[edit] Notes

These operators do not check whether the optional represents an expected value, users can do so manually by using has_value() or operator bool(). Alternatively, if checked access is needed, value() or value_or() may be used.

[edit] Example

#include #include #include #include #include   int main() { using namespace std::string_literals;   std::expected<int, std::string> ex1 = 6; assert(*ex1 == 6);   *ex1 = 9; assert(*ex1 == 9);   // *ex1 = "error"s; // error, ex1 contains an expected value of type int ex1 = std::unexpected("error"s); // *ex1 = 13; // UB, ex1 contains an unexpected value assert(ex1.value_or(42) == 42);   std::expected<std::string, bool> ex2 = "Moon"s; std::cout << "ex2: " << std::quoted(*ex2) << ", size: " << ex2->size() << '\n';   // You can "take" the expected value by calling operator* on an std::expected rvalue   auto taken = *std::move(ex2); std::cout << "taken " << std::quoted(taken) << "\n" "ex2: " << std::quoted(*ex2) << ", size: " << ex2->size() << '\n'; }

Possible output:

ex2: "Moon", size: 4 taken "Moon" ex2: "", size: 0

[edit] See also

| | returns the expected value (public member function) [edit] | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | returns the expected value if present, another value otherwise (public member function) [edit] | | | checks whether the object contains an expected value (public member function) [edit] | | | returns the unexpected value (public member function) [edit] |