deduction guides for std::stack
| Definiert in Header <stack> |
||
| template< class Container > stack( Container ) |
(1) | (seit C++17) |
| template< class Container, class Alloc > stack( Container, Alloc ) |
(2) | (seit C++17) |
| template< class InputIt > stack( InputIt, InputIt ) |
(3) | (seit C++23) |
| template< class InputIt, class Alloc > stack( InputIt, InputIt, Alloc ) |
(4) | (seit C++23) |
| template< ranges::input_range R > stack( std::from_range_t, R&& ) |
(5) | (seit C++23) |
| template< ranges::input_range R, class Allocator > stack( std::from_range_t, R&&, Allocator ) |
(6) | (seit C++23) |
Diese Deduktionshilfen werden für stack bereitgestellt, um die Deduktion vom zugrunde liegenden Containertyp zu ermöglichen.
Diese Überladungen nehmen nur an der Auflösung von Überladungen teil, wenn
-
InputIt(falls vorhanden) LegacyInputIterator erfüllt, -
Container(falls vorhanden) kein Allocator erfüllt, - für (3)(bis C++23)(4)(seit C++23) erfüllt
AllocAllocator, und - std::uses_allocator_v<Container, Alloc> ist true, wenn sowohl
Containerals auchAllocvorhanden sind.
Hinweis: Das Ausmaß, in dem die Bibliothek feststellt, dass ein Typ LegacyInputIterator nicht erfüllt, ist nicht spezifiziert, außer dass ganzzahlige Typen als Minimum keine Eingabeiteratoren sind. Ebenso ist das Ausmaß, in dem sie feststellt, dass ein Typ Allocator nicht erfüllt, nicht spezifiziert, außer dass als Minimum der Mitgliedstyp Alloc::value_type existieren muss und der Ausdruck std::declval<Alloc&>().allocate(std::size_t{}) als unevaluierter Operand wohlgeformt sein muss.
[bearbeiten] Notizen
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_adaptor_iterator_pair_constructor |
202106L |
(C++23) | Iterator-Paar-Konstruktoren für std::queue und std::stack; Überladungen (2) und (4) |
__cpp_lib_containers_ranges |
202202L |
(C++23) | Bereichsbezogene Konstruktion und Einfügung; Überladungen (5) und (6) |
[bearbeiten] Beispiel
#include <stack> #include <vector> int main() { std::vector<int> v = {1, 2, 3, 4}; std::stack s{v}; // guide #1 deduces std::stack<int, vector<int>> }