std::polymorphic<T, Allocator>:: polymorphic
|
constexpr
explicit
polymorphic
(
)
;
|
(1) | (since C++26) |
|
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a
)
;
|
(2) | (since C++26) |
|
template
<
class
U
=
T
>
constexpr explicit polymorphic ( U && v ) ; |
(3) | (since C++26) |
|
template
<
class
U
=
T
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(4) | (since C++26) |
|
template
<
class
U,
class
...
Args
>
constexpr explicit polymorphic ( std:: in_place_type_t < U > , Args && ... args ) ; |
(5) | (since C++26) |
|
template
<
class
U,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(6) | (since C++26) |
|
template
<
class
U,
class
I,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
in_place_type_t
<
U
>
,
|
(7) | (since C++26) |
|
template
<
class
U,
class
I,
class
...
Args
>
constexpr
explicit
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
|
(8) | (since C++26) |
|
constexpr
polymorphic
(
const
polymorphic
&
other
)
;
|
(9) | (since C++26) |
|
constexpr
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
const polymorphic & other ) ; |
(10) | (since C++26) |
|
constexpr
polymorphic
(
polymorphic
&&
other
)
noexcept
;
|
(11) | (since C++26) |
|
constexpr
polymorphic
(
std::
allocator_arg_t
,
const
Allocator
&
a,
polymorphic && other ) noexcept ( /* see below */ ) ; |
(12) | (since C++26) |
Constructs a new
polymorphic
object.
Contents |
Parameters
| a | - | the allocator to be associated |
| v | - | value with which to initialize the owned value |
| args | - | arguments with which to initialize the owned value |
| il | - | initializer list with which to initialize the owned value |
| other | - |
another
polymorphic
object whose owned value (if exists) is copied
|
Effects
The construction of a new
polymorphic
object consists of the following steps:
alloc
:
-
If the initializer for
allocis empty, it is value-initialized . -
If the initializer for
allocis not empty, it is direct-non-list-initialized with the initializer argument.
-
For overloads
(
1-8
)
, calls
std::
allocator_traits
<
Allocator
>
::
construct
(
alloc ,p, args... ) , where-
p
is a pointer of type
U*, it points to storage suitable for the owned object to be constructed, and - args... is an expression pack containing the initializer arguments.
-
p
is a pointer of type
-
For overloads
(
9-12
)
:
- If other is valueless, no owned object is constructed, and * this is also valueless after construction.
-
Otherwise, if
other
is an rvalue reference and
allocequals other.alloc, * this takes ownership of the owned object of other . -
Otherwise, the owned object is constructed using
allocas described above, where the type of p is determined by the type of the object owned by other .
| Overload | Initializer for... | Type of the owned object |
valueless_after_move()
after construction |
|
|---|---|---|---|---|
alloc
|
the owned object | |||
| ( 1 ) | (empty) | (empty) |
T
|
false |
| ( 2 ) | a | |||
| ( 3 ) | (empty) | std:: forward < U > ( v ) |
U
|
|
| ( 4 ) | a | |||
| ( 5 ) | (empty) | std:: forward < Args > ( args ) | ||
| ( 6 ) | a | |||
| ( 7 ) | (empty) |
ilist,
std:: forward < Args > ( args ) |
||
| ( 8 ) | a | |||
| ( 9 ) | see below |
*
other
(only if other owns a value) |
the type of the object owned by other | true only if other is valueless |
| ( 10 ) | a | |||
| ( 11 ) |
std
::
move
(
other.
alloc
)
|
takes ownership
(only if other owns a value) |
||
| ( 12 ) | a | see below | ||
alloc
is direct-non-list-initialized with
std::
allocator_traits
<
Allocator
>
::
select_on_container_copy_construction
(
other.
alloc
)
.
Constraints and supplement information
- std:: derived_from < std:: remove_cvref_t < U > , T >
- std:: is_copy_constructible_v < std:: remove_cvref_t < U >>
- std:: is_constructible_v < std:: remove_cvref_t < U > , /* argument types */ > , where /* argument types */ are:
U
Args...
- std:: is_same_v < std:: remove_cvref_t < U > , std :: polymorphic > is false .
-
Uis not a specialization of std::in_place_type_t .
Exceptions
Throws nothing unless std:: allocator_traits < Allocator > :: allocate or std:: allocator_traits < Allocator > :: construct throws.
Example
|
This section is incomplete
Reason: no example |
See also
|
(C++11)
|
tag type used to select allocator-aware constructor overloads
(class) |
|
in-place construction tag
(tag) |