# std::make_optional

From cppreference.com
< cpp‎ | utility‎ | optional

Defined in header `<optional>` |  |
template< class T > constexpr std::optional<std::decay_t<T>> make_optional( T&& value ); | (1) | (since C++17)
template< class T, class... Args > constexpr std::optional<T> make_optional( Args&&... args ); | (2) | (since C++17)
template< class T, class U, class... Args > constexpr std::optional<T> make_optional( std::initializer_list<U> il, Args&&... args ); | (3) | (since C++17)

1) Creates an optional object from `value`. Effectively calls std::optional<std::decay_t<T>>(std::forward<T>(value))
2) Creates an optional object constructed in-place from `args...`. Equivalent to return std::optional<T>(std::in_place, std::forward<Args>(args)...);.
3) Creates an optional object constructed in-place from `il` and `args...`. Equivalent to return std::optional<T>(std::in_place, il, std::forward<Args>(args)...);.

### Parameters

value | - | the value to construct optional object with
il, args | - | arguments to be passed to the constructor of `T`.

### Return value

The constructed optional object.

### Exceptions

Throws any exception thrown by the constructor of `T`.

### Notes

`T` need not be movable for overloads (2-3) due to guaranteed copy elision.

### See also

(constructor) | constructs the optional object (public member function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/optional/make_optional&oldid=105590"