Namespaces
Variants
Actions

std::polymorphic

From cppreference.com
< cpp‎ | memory
 
 
Memory management library
(exposition only*)
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
(until C++20*)
(until C++20*)
Garbage collector support (until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
 
 
Defined in header <memory>
template< class T, class Allocator = std::allocator<T> >
class polymorphic;
(1)(since C++26)
namespace pmr {

    template< class T >
    using polymorphic =
        std::polymorphic<T, std::pmr::polymorphic_allocator<T>>;

}
(2)(since C++26)
1) std::polymorphic is a wrapper containing dynamically-allocated object of possibly different types with value-like semantics.
2) std::pmr::polymorphic is an alias template that uses a polymorphic allocator.

An std::polymorphic object manages the lifetime of an owned object. The owned object is of type T or any type (publicly and unambiguously) derived from T. An std::polymorphic object can only have no owned object after it has been moved from, in this case it is valueless .

Every object of type std::polymorphic<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::polymorphic, 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:
-
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

TypeDefinition
value_typeT
allocator_typeAllocator
pointertypename std::allocator_traits<Allocator>::pointer
const_pointertypename std::allocator_traits<Allocator>::const_pointer

[edit] Data members

MemberDescription
Allocator allocthe asociated allocator
(exposition-only member object*)

[edit] Member functions

constructs the polymorphic object
(public member function) [edit]
destroys the owned value, if there is one
(public member function) [edit]
assigns contents
(public member function) [edit]
Observers
accesses the owned value
(public member function) [edit]
checks if the polymorphic is valueless
(public member function) [edit]
returns the associated allocator
(public member function) [edit]
Modifiers
exchanges the contents
(public member function) [edit]

[edit] Non-member functions

specializes the std::swap algorithm
(function template) [edit]

[edit] Notes

Feature-test macroValueStdFeature
__cpp_lib_polymorphic202502L(C++26)std::polymorphic

[edit] Example

[edit] See also

(C++26)
a wrapper containing dynamically-allocated object with value-like semantics
(class template) [edit]