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

From cppreference.com
< cpp‎ | utility
 
 
Utilities library
General utilities
Date and time
Function objects
Formatting library (C++20)
(C++11)
Relational operators (deprecated in C++20)
Integer comparison functions
(C++20)(C++20)(C++20)   
(C++20)
Swap and type operations
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Elementary string conversions
(C++17)
(C++17)
 
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::expected, 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++23)
a wrapper that contains either an expected or error value
(class template)
(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)