Espacios de nombres
Variantes

deduction guides for std::stack

De cppreference.com

[edit template]
 
 
 
 
<tbody> </tbody>
Definido en el archivo de encabezado <stack>
template<class Container> stack(Container) -> stack<typename Container::value_type, Container>;
(1) (desde C++17)
template<class InputIt> stack(InputIt, InputIt) -> stack</*valor-de-iter-t*/<InputIt>>;
(2) (desde C++23)
template<class Container, class Alloc> stack(Container, Alloc) -> stack<typename Container::value_type, Container>;
(3) (desde C++17)
template<class InputIt, class Alloc> stack(InputIt, InputIt, Alloc) -> stack</*valor-de-iter-t*/<InputIt>, std::deque</*valor-de-iter-t*/<InputIt>, Alloc>>;
(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), Alloc satisface Allocator, y
  • std::uses_allocator_v<Container, Alloc> es true si tanto Container como Alloc existen.

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>>
}