Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/utility/in place"

From cppreference.com
< cpp‎ | utility
(Undo revision 123938 by Ljestrada (talk))
m (fmt)
Line 1: Line 1:
{{cpp/title|in_place|in_place_type|in_place_index|in_place_t|in_place_type_t|in_place_index_t }}
+
{{cpp/title|in_place|in_place_type|in_place_index|in_place_t|in_place_type_t|in_place_index_t}}
 
{{cpp/utility/navbar}}
 
{{cpp/utility/navbar}}
 
{{dcl begin}}
 
{{dcl begin}}
{{dcl header | utility}}
+
{{dcl header|utility}}
{{dcl | since=c++17 | 1=
+
{{dcl|since=c++17|1=
 
struct in_place_t {
 
struct in_place_t {
 
     explicit in_place_t() = default;
 
     explicit in_place_t() = default;
Line 9: Line 9:
 
inline constexpr in_place_t in_place{};
 
inline constexpr in_place_t in_place{};
 
}}
 
}}
{{dcl | since=c++17 | 1=
+
{{dcl|since=c++17|1=
template <class T> struct in_place_type_t {
+
template< class T >
 +
struct in_place_type_t {
 
     explicit in_place_type_t() = default;
 
     explicit in_place_type_t() = default;
 
};
 
};
template <class T>
+
template< class T >
 
inline constexpr in_place_type_t<T> in_place_type{};
 
inline constexpr in_place_type_t<T> in_place_type{};
 
}}
 
}}
{{dcl | since=c++17 |1=
+
{{dcl|since=c++17|1=
template <std::size_t I> struct in_place_index_t {
+
template< std::size_t I >
 +
struct in_place_index_t {
 
     explicit in_place_index_t() = default;
 
     explicit in_place_index_t() = default;
 
};
 
};
template <std::size_t I>
+
template< std::size_t I >
 
inline constexpr in_place_index_t<I> in_place_index{};
 
inline constexpr in_place_index_t<I> in_place_index{};
 
}}
 
}}
 
{{dcl end}}
 
{{dcl end}}
  
{{tt|std::in_place}}, {{tt|std::in_place_type}}, and {{tt|std::in_place_index}} are disambiguation tags that can be passed to the constructors of {{lc|std::optional}}, {{lc|std::variant}}, and {{lc|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.  
+
{{tt|std::in_place}}, {{tt|std::in_place_type}}, and {{tt|std::in_place_index}} are disambiguation tags that can be passed to the constructors of {{lc|std::optional}}, {{lc|std::variant}}, and {{lc|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 {{tt|std::in_place_t}}, {{tt|std::in_place_type_t}} and {{tt|std::in_place_index_t}} can be used in the constructor's parameter list to match the intended tag.
 
The corresponding type/type templates {{tt|std::in_place_t}}, {{tt|std::in_place_type_t}} and {{tt|std::in_place_index_t}} can be used in the constructor's parameter list to match the intended tag.
Line 31: Line 33:
 
===See also===
 
===See also===
 
{{dsc begin}}
 
{{dsc begin}}
{{dsc inc | cpp/utility/dsc optional}}
+
{{dsc inc|cpp/utility/dsc optional}}
{{dsc inc | cpp/utility/dsc variant}}
+
{{dsc inc|cpp/utility/dsc variant}}
{{dsc inc | cpp/utility/dsc any}}
+
{{dsc inc|cpp/utility/dsc any}}
 
{{dsc end}}
 
{{dsc end}}
  
 
{{langlinks|ja|zh}}
 
{{langlinks|ja|zh}}

Revision as of 13:43, 12 January 2023

 
 
Utilities library
General utilities
Relational operators (deprecated in C++20)
 
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) [edit]
(C++17)
a type-safe discriminated union
(class template) [edit]
(C++17)
objects that hold instances of any CopyConstructible type
(class) [edit]