std::indirect - cppreference.com (original) (raw)

Defined in header
template< class T, class Allocator = std::allocator<T> > class indirect; (1) (since C++26)
namespace pmr { template< class T > using indirect = std::indirect<T, std::pmr::polymorphic_allocator<T>>; } (2) (since C++26)
  1. std::indirect is a wrapper containing dynamically-allocated object with value-like semantics.

An std::indirect object manages the lifetime of an owned object. An std::indirect object can only have no owned object after it has been moved from, in this case it is valueless .

Every object of type std::indirect<T, Allocator> uses an object of type Allocator to allocate and free storage for the owned object as needed.

If a program declares an explicit or partial specialization of std::indirect, the behavior is undefined.

Contents

[edit] Template parameters

T - the type of the owned object
Allocator - the type of the associated allocator
Type requirements
-T may be an incomplete type.
-If T is one of the following types, the program is ill-formed: a non-object type an array type std::in_place_t a specialization of std::in_place_type_t a cv-qualified type
-If Allocator does not satisfy the requirements of Allocator, the program is ill-formed.
-If std::allocator_traits<Allocator>::value_type is not the same type as T, the program is ill-formed.

[edit] Nested types

[edit] Data members

Member Description
pointer p a pointer to the owned value(exposition-only member object*)
Allocator alloc the asociated allocator(exposition-only member object*)

[edit] Member functions

(constructor) constructs the indirect object (public member function) [edit]
(destructor) destroys the owned value, if there is one (public member function) [edit]
operator= assigns contents (public member function) [edit]
Observers
operator->operator* accesses the owned value (public member function) [edit]
valueless_after_move checks if the indirect is valueless (public member function) [edit]
get_allocator returns the associated allocator (public member function) [edit]
Modifiers
swap exchanges the contents (public member function) [edit]

[edit] Non-member functions

[edit] Helper classes

[edit] Deduction guides

[edit] Notes

Feature-test macro Value Std Feature
__cpp_lib_indirect 202502L (C++26) std::indirect

[edit] Example

[edit] See also

| | a polymorphic wrapper containing dynamically-allocated object with value-like semantics (class template) [edit] | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | smart pointer with unique object ownership semantics (class template) [edit] |