W3cubDocs

/C++

std::in_place, std::in_place_t, std::in_place_type_t, std::in_place_index_t

Defined in header <utility>
std::in_place_tag in_place( /* unspecified */ );
(1) (since C++17)
template < class T >
std::in_place_tag in_place( /* unspecified */<T> );
(2) (since C++17)
template < std::size_t I >
std::in_place_tag in_place( /* unspecified */<I> );
(3) (since C++17)
using in_place_t = std::in_place_tag (&)( /* unspecified */ );
(since C++17)
template < class T >
using in_place_type_t = std::in_place_tag (&)( /* unspecified */<T> );
(since C++17)
template < std::size_t I >
using in_place_index_t = std::in_place_tag (&)( /* unspecified */<I> );
(since C++17)

The std::in_place function and function templates are special disambiguation tags that can be passed to the constructors of std::optional, std::variant, and std::any to indicate that the contained object should be constructed in-place, and (for the latter two) the type of the object to be constructed.

They are implemented as a set of overloaded function/function templates with a special return type, to allow users to write all of in_place, in_place<T> (with a type), and in_place<I> (with an integral index). The corresponding alias/alias templates in_place_t, in_place_type_t and in_place_index_t can be used in the constructor's parameter list to match the intended tag.

Actually calling any of the in_place functions results in undefined behavior.

See also

(since C++17)
a wrapper that may or may not hold an object
(class template)
(since C++17)
a type-safe discriminated union
(class template)
(since C++17)
Objects that hold instances of any CopyConstructible type.
(class)
(since C++17)
Special tag type used by the in-place construction tags
(class)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/utility/optional/in_place