Namespaces
Variants
Views
Actions

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

From cppreference.com
< cpp‎ | utility
m (Synopsis: +(1)...(6)
m ([email protected]@, and swapped two paragraphs.)
Line 27: Line 27:
 
{{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::expected}}, {{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.
+
@1,3,5@ The 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.
+
@2,4,6@ The corresponding {{tt|std::in_place}}, {{tt|std::in_place_type}}, and {{tt|std::in_place_index}} instances of {{v|1,3,5}} are disambiguation tags that can be passed to the constructors of {{lc|std::expected}}, {{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.
  
 
===See also===
 
===See also===

Revision as of 09:49, 27 November 2023

 
 
Utilities library
General utilities
Relational operators (deprecated in C++20)
 
Defined in header <utility>
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 >
inline 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 >
inline 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 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.

See also

(C++23)
a wrapper that contains either an expected or error value
(class template) [edit]
(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]