deduction guides for std::stack - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(1) | (desde C++17) |
|
|
(2) | (desde C++23) |
|
|
(3) | (desde C++17) |
|
|
(4) | (desde C++23) |
Estas guías de deducción se proporcionan por stack para permitir la deducción a partir del tipo de contenedor subyacente.
1) Deduce el tipo de contenedor subyacente a partir del argumento.
2) Deduce el tipo de elemento a partir del iterador, usando std::deque</*valor-de-iter-t*/<InputIt>> como el tipo de contenedor subyacente, donde /*valor-de-iter-t*/<InputIt> denota typename std::iterator_traits<InputIt>::value_type.
3-4) Igual que (1-2), excepto que se proporciona un asignador de memoria.
Estas sobrecargas solo participan en la resolución de sobrecargas si
InputIt(si existe) satisface InputIterator,Container(si existe) no satisface Allocator,- Para (3) (hasta C++23)(4) (desde C++23),
Allocsatisface Allocator, y std::uses_allocator_v<Container, Alloc>estruesi tantoContainercomoAllocexisten.
Nota: no se especifica hasta qué grado la biblioteca determina que un tipo no satisface a IteradorDeEntradaLegado, excepto que, como mínimo, los tipos enteros no califican como iteradores de entrada. Del mismo modo, no se especifica en qué medida se determina que un tipo no satisface a Allocator, excepto que, como mínimo, el tipo miembro Alloc::value_type debe existir y la expresión std::declval<Alloc &>().allocate(std::size_t{}) debe estar bien formada cuando se trate como un operando no evaluado.
Ejemplo
#include <vector> #include <stack> int main() { std::vector<int> v = {1, 2, 3, 4}; std::stack s{v}; // guía #1 deduce std::stack<int, vector<int>> }