##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::experimental::optional

From cppreference.com
< cpp‎ | experimental

| 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.

| This is work in progress, there may be inaccuracies

Defined in header `<experimental/optional>` |  |
template< class T > class optional; |  | (library fundamentals TS)

The class template `std::experimental::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. An `optional` object with a value in initialized state is called engaged, whereas if the value is in uninitialized state, the object is called disengaged.

The `optional` object is engaged on the following conditions:

- The object is initialized with a value of type `T`

- The object is assigned an engaged `optional`.

The object is disengaged on the following conditions:

- The object is default-initialized.

- The object is initialized with a value of std::experimental::nullopt_t or a disengaged `optional` object.

- The object is assigned a value of std::experimental::nullopt_t or a disengaged `optional`.

### [edit] Template parameters

T | - | the type of the value to manage initialization state for. The type must meet the requirements of `Destructible`

### [edit] Member types

Member type | Definition
`value_type` | `T`

### [edit] Member functions

(constructor) | constructs the optional object (public member function) [edit]
(destructor) | if engaged, destroys the contained value (public member function) [edit]
operator= | assigns contents (public member function) [edit]
##### Observers
operator->operator* | accesses the contained value (public member function) [edit]
operator bool | checks whether the object is in engaged state (public member function) [edit]
value | returns the contained value (public member function) [edit]
value_or | returns the contained value if engaged, another value otherwise (public member function) [edit]
##### Modifiers
swap | exchanges the contents (public member function) [edit]
emplace | constructs the contained value in-place (public member function) [edit]

### [edit] Non-member functions

operator==operator< | compares `optional` objects (function template) [edit]
make_optional | creates an `optional` object (function template) [edit]
std::swap(std::experimental::optional) | specializes the std::swap algorithm (function) [edit]

### [edit] Helper classes

std::hash<std::experimental::optional> | specializes the std::hash algorithm (class template specialization) [edit]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/experimental/optional&oldid=69014"