std::optional<T>::value

From cppreference.com
< cpp‎ | utility‎ | optional
 
 
Utilities library
General utilities
Date and time
Function objects
Formatting library (C++20)
(C++11)
Relational operators (deprecated in C++20)
Integer comparison functions
(C++20)(C++20)(C++20)   
(C++20)
Swap and type operations
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Elementary string conversions
(C++17)
(C++17)
 
std::optional
Member functions
Observers
optional::value
(C++17)
Monadic operations
Modifiers
Non-member functions
(C++17)(C++17)(C++17)(C++17)(C++17)(C++17)(C++20)
(C++17)
Deduction guides
Helper classes
(C++17)
(C++17)
(C++17)
Helper objects
(C++17)
(C++17)
 
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.

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

#include <optional>
#include <iostream>
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 otherwise
(public member function)
accesses the contained value
(public member function)
exception indicating checked access to an optional that doesn't contain a value
(class)