|After reviewing national body comments to n3690, this library component was voted out from C++14 working paper into a separate Technical Specification. It is not a part of the draft C++14 as of n3797.|
Defined in header
template< class T >
The class template
std::optional manages an optional contained value, i.e. a value that semantically 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.
The value is guaranteed to be allocated within the
optional object itself, i.e. no dynamic memory allocation ever takes place. Thus, an
optional object models an object, not a pointer, even though the operator*() and operator->() are defined.
The value inside an
optional object may be in either an initialized or uninitialized state. A
optional object with a value in initialized state is called engaged, whereas if the value is in uninitialized state, the object is called disengaged.
optional object is engaged on the following conditions:
- The object is initialized with a value of type
- The object is assigned an engaged
The object is disengaged on the following conditions:
- The object is default-initialized.
- The object is initialized with a value of std::nullopt_t or a disengaged
- The object is assigned a value of std::nullopt_t or a disengaged
|T||-|| the type of the value to manage initialization state for. The type must meet the requirements of |