std::optional::value(3)

NAME
std::optional::value - std::optional::value

Synopsis
   constexpr T& value() &; (1) (since C++17)
   constexpr const T& value() const &;
   constexpr T&& value() &&; (2) (since C++17)
   constexpr const T&& value() const &&;
   If *this contains a value, returns a reference to the contained value.
   Otherwise, throws a std::bad_optional_access exception.

Parameters
   (none)

Return value
   A reference to the contained value.

Exceptions
   std::bad_optional_access if *this does not contain a value.

Notes
   The dereference operator operator*() does not check if this optional contains a
   value, which may be more efficient than value().

Example
// Run this code
 #include <iostream>
 #include <optional>
 int main()
 {
     std::optional<int> opt = {};
     try
     {
         [[maybe_unused]] int n = opt.value();
     }
     catch(const std::bad_optional_access& e)
     {
         std::cout << e.what() << '\n';
     }
     try
     {
         opt.value() = 42;
     }
     catch(const std::bad_optional_access& e)
     {
         std::cout << e.what() << '\n';
     }
     opt = 43;
     std::cout << *opt << '\n';
     opt.value() = 44;
     std::cout << opt.value() << '\n';
 }

Output:
 bad optional access
 bad optional access
 43
 44

See also
                       returns the contained value if available, another value
   value_or otherwise
                       (public member function)
   operator-> accesses the contained value
   operator* (public member function)
   bad_optional_access exception indicating checked access to an optional that doesn't
   (C++17) contain a value
                       (class)