std::in_place, std::in_place_type, std::in_place_index, std::in_place_t, std::in_place_type_t, std::in_place_index_t
| Defined in header <utility> | ||
|---|---|---|
| struct in_place_t {
    explicit in_place_t() = default;
};
inline constexpr in_place_t in_place{}; | (since C++17) | |
| template <class T> struct in_place_type_t {
    explicit in_place_type_t() = default;
};
template <class T>
inline constexpr in_place_type_t<T> in_place_type{}; | (since C++17) | |
| template <std::size_t I> struct in_place_index_t {
    explicit in_place_index_t() = default;
};
template <std::size_t I>
inline constexpr in_place_index_t<I> in_place_index{}; | (since C++17) | 
std::in_place, std::in_place_type, and std::in_place_index are 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.
The corresponding type/type templates std::in_place_t, std::in_place_type_t and std::in_place_index_t can be used in the constructor's parameter list to match the intended tag.
See also
| (C++17) | a wrapper that may or may not hold an object (class template) | 
| (C++17) | a type-safe discriminated union (class template) | 
| (C++17) | Objects that hold instances of any CopyConstructible type. (class) | 
    © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
    http://en.cppreference.com/w/cpp/utility/in_place