deduction guides for std::queue
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <queue>
|
||
template<class Container> queue(Container) -> queue<typename Container::value_type, Container>; |
(1) | (desde C++17) |
template<class InputIt> queue(InputIt, InputIt) -> queue</*valor-de-iter-t*/<InputIt>>; |
(2) | (desde C++23) |
template<class Container, class Alloc> queue(Container, Alloc) -> queue<typename Container::value_type, Container>; |
(3) | (desde C++17) |
template<class InputIt, class Alloc> queue(InputIt, InputIt, Alloc) -> queue</*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 queue 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
Ejecuta este código
#include <vector>
#include <queue>
int main() {
std::vector<int> v = {1, 2, 3, 4};
std::queue s{v}; // guía #1 deduce std::queue<int, vector<int>>
}