std::uses_allocator_construction_args
| Definiert in Header <memory> |
||
T ist keine Spezialisierung von std::pair |
||
| template< class T, class Alloc, class... Args > constexpr auto uses_allocator_construction_args( const Alloc& alloc, |
(1) | (seit C++20) |
T ist eine Spezialisierung von std::pair |
||
| template< class T, class Alloc, class Tuple1, class Tuple2 > constexpr auto uses_allocator_construction_args( const Alloc& alloc, |
(2) | (seit C++20) |
| template< class T, class Alloc > constexpr auto uses_allocator_construction_args( const Alloc& alloc ) noexcept; |
(3) | (seit C++20) |
| template< class T, class Alloc, class U, class V > constexpr auto uses_allocator_construction_args( const Alloc& alloc, |
(4) | (seit C++20) |
| template< class T, class Alloc, class U, class V > constexpr auto uses_allocator_construction_args( const Alloc& alloc, |
(5) | (seit C++23) |
| template< class T, class Alloc, class U, class V > constexpr auto uses_allocator_construction_args( const Alloc& alloc, |
(6) | (seit C++20) |
| template< class T, class Alloc, class U, class V > constexpr auto uses_allocator_construction_args( const Alloc& alloc, |
(7) | (seit C++20) |
| template< class T, class Alloc, class U, class V > constexpr auto uses_allocator_construction_args( const Alloc& alloc, |
(8) | (seit C++23) |
| template< class T, class Alloc, class NonPair > constexpr auto uses_allocator_construction_args( const Alloc& alloc, |
(9) | (seit C++20) |
Bereitet die Argumentenliste vor, die zum Erstellen eines Objekts des gegebenen Typs T mittels Uses-Allocator-Konstruktion benötigt wird.
T keine Spezialisierung von std::pair ist. Gibt ein std::tuple zurück, das wie folgt ermittelt wird:- Wenn std::uses_allocator_v<T, Alloc> false ist und std::is_constructible_v<T, Args...> true ist, gibt zurück std::forward_as_tuple(std::forward<Args>(args)...).
- Andernfalls, wenn std::uses_allocator_v<T, Alloc> true ist und std::is_constructible_v<T, std::allocator_arg_t, const Alloc&, Args...> true ist, gibt zurück:
std::tuple<std::allocator_arg_t, const Alloc&, Args&&...>(std::allocator_arg, alloc,
std::forward<Args>(args).... - Andernfalls, wenn std::uses_allocator_v<T, Alloc> true ist und std::is_constructible_v<T, Args..., const Alloc&> true ist, gibt zurück std::forward_as_tuple(std::forward<Args>(args)..., alloc).
- Andernfalls ist das Programm fehlerhaft.
T eine Spezialisierung von std::pair ist. Für T, das std::pair<T1, T2> ist, äquivalent zureturn 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 eine Spezialisierung von std::pair ist. Äquivalent zureturn std::uses_allocator_construction_args<T>(alloc, std::piecewise_construct, std::tuple<>{}, std::tuple<>{} );
T eine Spezialisierung von std::pair ist. Äquivalent zureturn 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 eine Spezialisierung von std::pair ist. Äquivalent zureturn std::uses_allocator_construction_args<T>(alloc, std::piecewise_construct, std::forward_as_tuple(pr.first), std::forward_as_tuple(pr.second) );
T eine Spezialisierung von std::pair ist. Äquivalent zureturn 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 eine Spezialisierung von std::pair ist, und gegeben der expositions-nur Funktion Templatetemplate<class A, class B> void /*deduce-as-pair*/(const std::pair<A, B>&);
, /*deduce-as-pair*/(non_pair) ist fehlerhaft, wenn als unevaluierter Operand betrachtet.
Sei die expositions-nur Klasse pair-constructor definiert als
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 ein Wert vom Typ pair-constructor ist, dessen alloc_ und u_ Mitglieder alloc und non_pair sind.Inhalt |
[bearbeiten] Parameter
| alloc | - | der zu verwendende Allokator |
| args | - | die Argumente, die an den Konstruktor von T übergeben werden sollen |
| x | - | Tupel von Argumenten, die an die Konstruktoren des first-Datenmembers von T übergeben werden sollen |
| y | - | Tupel von Argumenten, die an die Konstruktoren des second-Datenmembers von T übergeben werden sollen |
| u | - | einzelnes Argument, das an den Konstruktor des first-Datenmembers von T übergeben werden soll |
| v | - | einzelnes Argument, das an den Konstruktor des second-Datenmembers von T übergeben werden soll |
| pr | - | ein Paar, dessen first-Datenmember an den Konstruktor des first-Datenmembers von T übergeben wird und dessen second-Datenmember an den Konstruktor des second-Datenmembers von T übergeben wird |
| non_pair | - | einzelnes Argument, das in ein std::pair für die weitere Konstruktion konvertiert wird |
[bearbeiten] Rückgabewert
std::tuple von Argumenten, die geeignet sind, an den Konstruktor von T übergeben zu werden.
[bearbeiten] Hinweise
Die Überladungen (2-9) stellen die Weitergabe von Allocator an std::pair bereit, das weder die Leading-Allocator- noch die Trailing-Allocator-Aufrufkonventionen unterstützt (im Gegensatz zu z. B. std::tuple, das die Leading-Allocator-Konvention verwendet).
Bei der Verwendung in der Uses-Allocator-Konstruktion konvertiert die Konvertierungsfunktion von pair-constructor zunächst das bereitgestellte Argument in std::pair und erstellt dann das Ergebnis aus diesem std::pair mittels Uses-Allocator-Konstruktion.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Fehlermeldungen
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3525 | C++20 | keine Überladung konnte in Paare konvertierbare Nicht-pair-Typen behandeln |
Rekonstruktionsüberladung hinzugefügt |
[bearbeiten] Siehe auch
| (C++11) |
prüft, ob der angegebene Typ Uses-Allocator-Konstruktion unterstützt (Klassen-Template) |
| (C++20) |
erstellt ein Objekt des gegebenen Typs mittels Uses-Allocator-Konstruktion (Funktions-Template) |
| erstellt ein Objekt des gegebenen Typs an einer angegebenen Speicherstelle mittels Uses-Allocator-Konstruktion (Funktions-Template) |