std:: uses_allocator_construction_args
|
Défini dans l'en-tête
<memory>
|
||
T
n'est pas une spécialisation de
std::pair
|
||
|
template
<
class
T,
class
Alloc,
class
...
Args
>
constexpr
auto
uses_allocator_construction_args
(
const
Alloc
&
alloc,
|
(1) | (depuis C++20) |
T
est une spécialisation de
std::pair
|
||
|
template
<
class
T,
class
Alloc,
class
Tuple1,
class
Tuple2
>
constexpr
auto
uses_allocator_construction_args
(
const
Alloc
&
alloc,
|
(2) | (depuis C++20) |
|
template
<
class
T,
class
Alloc
>
constexpr auto uses_allocator_construction_args ( const Alloc & alloc ) noexcept ; |
(3) | (depuis C++20) |
|
template
<
class
T,
class
Alloc,
class
U,
class
V
>
constexpr
auto
uses_allocator_construction_args
(
const
Alloc
&
alloc,
|
(4) | (depuis C++20) |
|
template
<
class
T,
class
Alloc,
class
U,
class
V
>
constexpr
auto
uses_allocator_construction_args
(
const
Alloc
&
alloc,
|
(5) | (depuis C++23) |
|
template
<
class
T,
class
Alloc,
class
U,
class
V
>
constexpr
auto
uses_allocator_construction_args
(
const
Alloc
&
alloc,
|
(6) | (depuis C++20) |
|
template
<
class
T,
class
Alloc,
class
U,
class
V
>
constexpr
auto
uses_allocator_construction_args
(
const
Alloc
&
alloc,
|
(7) | (depuis C++20) |
|
template
<
class
T,
class
Alloc,
class
U,
class
V
>
constexpr
auto
uses_allocator_construction_args
(
const
Alloc
&
alloc,
|
(8) | (depuis C++23) |
|
template
<
class
T,
class
Alloc,
class
NonPair
>
constexpr
auto
uses_allocator_construction_args
(
const
Alloc
&
alloc,
|
(9) | (depuis C++20) |
Prépare la liste d'arguments nécessaire pour créer un objet du type donné
T
au moyen de la
construction uses-allocator
.
T
n'est pas une spécialisation de
std::pair
. Retourne
std::tuple
déterminé comme suit :
- Si std:: uses_allocator_v < T, Alloc > est false et std:: is_constructible_v < T, Args... > est true , retourne std:: forward_as_tuple ( std:: forward < Args > ( args ) ... ) .
-
Sinon, si
std::
uses_allocator_v
<
T, Alloc
>
est
true
et
std::
is_constructible_v
<
T,
std::
allocator_arg_t
,
const
Alloc
&
, Args...
>
est
true
, retourne
std:: tuple < std:: allocator_arg_t , const Alloc & , Args && ... > ( std:: allocator_arg , alloc,
std:: forward < Args > ( args ) ... ) . - Sinon, si std:: uses_allocator_v < T, Alloc > est true et std:: is_constructible_v < T, Args..., const Alloc & > est true , retourne std:: forward_as_tuple ( std:: forward < Args > ( args ) ..., alloc ) .
- Sinon, le programme est mal formé.
T
est une spécialisation de
std::pair
. Pour
T
qui est
std::
pair
<
T1, T2
>
, équivalent à
return std::make_tuple(std::piecewise_construct, std::apply([&alloc](auto&&... args1) { return std::uses_allocator_construction_args<T1>(alloc, std::forward<decltype(args1)>(args1)...); }, std::forward<Tuple1>(x) ), std::apply([&alloc](auto&&... args2) { return std::uses_allocator_construction_args<T2>(alloc, std::forward<decltype(args2)>(args2)...); }, std::forward<Tuple2>(y) ) );
T
est une spécialisation de
std::pair
. Équivalent à
return std::uses_allocator_construction_args<T>(alloc, std::piecewise_construct, std::tuple<>{}, std::tuple<>{} );
T
est une spécialisation de
std::pair
. Équivalent à
return std::uses_allocator_construction_args<T>(alloc, std::piecewise_construct, std::forward_as_tuple(std::forward<U>(u)), std::forward_as_tuple(std::forward<V>(v)) );
T
est une spécialisation de
std::pair
. Équivalent à
return std::uses_allocator_construction_args<T>(alloc, std::piecewise_construct, std::forward_as_tuple(pr.first), std::forward_as_tuple(pr.second) );
T
est une spécialisation de
std::pair
. Équivalent à
return std::uses_allocator_construction_args<T>(alloc, std::piecewise_construct, std::forward_as_tuple(std::get<0>(std::move(pr))), std::forward_as_tuple(std::get<1>(std::move(pr))) );
T
est une spécialisation de
std::pair
, et étant donné le modèle de fonction d'exposition uniquement
template<class A, class B> void /*deduce-as-pair*/(const std::pair<A, B>&);
,
/*deduce-as-pair*/
(
non_pair
)
est mal formé lorsqu'il est considéré comme un opérande non évalué.
Soit la classe d'exposition uniquement
pair-constructor
définie comme
class /*pair-constructor*/ { const Alloc& alloc_; // exposition only NonPair& u_; // exposition only constexpr reconstruct(const std::remove_cv<T>& p) const // exposition only { return std::make_obj_using_allocator<std::remove_cv<T>>(alloc_, p); } constexpr reconstruct(std::remove_cv<T>&& p) const // exposition only { return std::make_obj_using_allocator<std::remove_cv<T>>(alloc_, std::move(p)); } public: constexpr operator std::remove_cv<T>() const { return reconstruct(std::forward<NonPair>(u_)); } };
pair_construction
est une valeur de type
pair-constructor
dont les membres
alloc_
et
u_
sont respectivement
alloc
et
non_pair
.
Table des matières |
Paramètres
| alloc | - | l'allocateur à utiliser |
| args | - |
les arguments à passer au constructeur de
T
|
| x | - |
tuple d'arguments à passer aux constructeurs du
first
membre de données de
T
|
| y | - |
tuple d'arguments à passer aux constructeurs du
second
membre de données de
T
|
| u | - |
argument unique à passer au constructeur du
first
membre de données de
T
|
| v | - |
argument unique à passer au constructeur du
second
membre de données de
T
|
| pr | - |
une paire dont le membre de données
first
sera passé au constructeur du
first
membre de données de
T
et le membre de données
second
sera passé au constructeur du
second
membre de données de
T
|
| non_pair | - | argument unique à convertir en std::pair pour une construction ultérieure |
Valeur de retour
std::tuple
d'arguments appropriés pour être passés au constructeur de
T
.
Notes
Les surcharges (2-9) fournissent la propagation de l'allocateur dans std::pair , qui ne prend en charge ni les conventions d'appel d'allocateur en tête ni en queue (contrairement, par exemple, à std::tuple , qui utilise la convention d'allocateur en tête).
Lorsqu'il est utilisé dans la construction uses-allocator, la fonction de conversion de
pair-constructor
convertit d'abord l'argument fourni en
std::pair
, puis construit le résultat à partir de cette
std::pair
par construction uses-allocator.
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3525 | C++20 |
aucune surcharge ne pouvait gérer les types non-
pair
convertibles en
pair
|
surcharge de reconstruction ajoutée |
Voir aussi
|
(C++11)
|
vérifie si le type spécifié prend en charge la construction par allocateur
(modèle de classe) |
|
(C++20)
|
crée un objet du type donné au moyen de la construction par allocateur
(modèle de fonction) |
|
crée un objet du type donné à un emplacement mémoire spécifié au moyen de la construction par allocateur
(modèle de fonction) |