< cpp‎ | utility‎ | optional
constexpr T& value() &;
constexpr const T & value() const &;
(1) (since C++17)
constexpr T&& value() &&;
constexpr const T&& value() const &&;
(2) (since C++17)

If *this contains a value, returns a reference to the contained value.

Otherwise, throws a std::bad_optional_access exception.



Return value

A reference to the contained value.


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


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


#include <optional>
#include <iostream>
int main()
    std::optional<int> opt = {};
    try {
        int n = opt.value();
    } catch(const std::bad_optional_access& e) {
        std::cout << e.what() << '\n';

Possible output:

bad optional access

See also

returns the contained value if available, another value otherwise
(public member function)
accesses the contained value
(public member function)
exception indicating checked access to an optional that doesn't contain a value