From cppreference.com

<optional> Defined in header template < class T >

class optional ; (since C++17)

The class template std::optional manages an optional contained value, i.e. a value that may or may not be present.

A common use case for optional is the return value of a function that may fail. As opposed to other approaches, such as std::pair<T,bool>, optional handles expensive-to-construct objects well and is more readable, as the intent is expressed explicitly.

Any instance of optional<T> at any given point in time either contains a value or does not contain a value.

If an optional<T> contains a value, the value is guaranteed to be allocated as part of the optional object footprint, i.e. no dynamic memory allocation ever takes place. Thus, an optional object models an object, not a pointer, even though operator*() and operator->() are defined.

When an object of type optional<T> is contextually converted to bool, the conversion returns true if the object contains a value and false if it does not contain a value.

The optional object contains a value in the following conditions:

The object is initialized with/assigned from a value of type T or another optional that contains a value.

The object does not contain a value in the following conditions:

The object is default-initialized.

The object is initialized with/assigned from a value of type std::nullopt_t optional object that does not contain a value .

object that . The member function reset()

There are no optional references; a program is ill-formed if it instantiates an optional with a reference type. Alternatively, an optional of a std::reference_wrapper of type T may be used to hold a reference. In addition, a program is ill-formed if it instantiates an optional with the (possibly cv-qualified) tag types std::nullopt_t or std::in_place_t.

edit] Template parameters

T - the type of the value to manage initialization state for. The type must meet the requirements of Destructible (in particular, array types are not allowed).

edit] Member types

Member type Definition value_type T

edit] Member functions

(constructor) constructs the optional object

(public member function) (destructor) destroys the contained value, if there is one

(public member function) operator= assigns contents

(public member function) Observers operator-> operator* accesses the contained value

(public member function) operator bool has_value checks whether the object contains a value

(public member function) value returns the contained value

(public member function) value_or returns the contained value if available, another value otherwise

(public member function) Modifiers swap exchanges the contents

(public member function) reset destroys any contained value

(public member function) emplace constructs the contained value in-place

(public member function)

edit] Non-member functions

edit] Helper classes

std::hash <std::optional> (C++17) specializes the std::hash

(class template specialization) nullopt_t (C++17) indicator of optional type with uninitialized state

(class) bad_optional_access (C++17) exception indicating checked access to an optional that doesn't contain a value

(class)

edit] Helpers

edit] Example

edit] See also