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 (original) (raw)

Defined in header
struct in_place_t { explicit in_place_t() = default; }; (1) (since C++17)
inline constexpr std::in_place_t in_place {}; (2) (since C++17)
template< class T > struct in_place_type_t { explicit in_place_type_t() = default; }; (3) (since C++17)
template< class T > constexpr std::in_place_type_t<T> in_place_type {}; (4) (since C++17)
template< std::size_t I > struct in_place_index_t { explicit in_place_index_t() = default; }; (5) (since C++17)
template< std::size_t I > constexpr std::in_place_index_t<I> in_place_index {}; (6) (since C++17)

1,3,5) The 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.

2,4,6) The corresponding std::in_place, std::in_place_type, and std::in_place_index instances of (1,3,5) are disambiguation tags that can be passed to the constructors to indicate that the contained object should be constructed in-place, and (for the latter two) the type of the object to be constructed.

[edit] Standard library

The following standard library types use (1-6) as disambiguation tags:

| | objects that hold instances of any CopyConstructible type (class) [edit] | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | a wrapper that contains either an expected or error value (class template) [edit] | | | move-only wrapper of any callable object that supports qualifiers in a given call signature (class template) [edit] | | | a wrapper that may or may not hold an object (class template) [edit] | | | a type-safe discriminated union (class template) [edit] |

[edit] See also