deduction guides for
std::stack
|
Definido en el encabezado
<stack>
|
||
|
template
<
class
Container
>
stack
(
Container
)
|
(1) | (desde C++17) |
|
template
<
class
Container,
class
Alloc
>
stack
(
Container, Alloc
)
|
(2) | (desde C++17) |
|
template
<
class
InputIt
>
stack
(
InputIt, InputIt
)
|
(3) | (desde C++23) |
|
template
<
class
InputIt,
class
Alloc
>
stack
(
InputIt, InputIt, Alloc
)
|
(4) | (desde C++23) |
|
template
<
ranges::
input_range
R
>
stack
(
std::
from_range_t
, R
&&
)
|
(5) | (desde C++23) |
|
template
<
ranges::
input_range
R,
class
Allocator
>
stack
(
std::
from_range_t
, R
&&
, Allocator
)
|
(6) | (desde C++23) |
Estas
guías de deducción
se proporcionan para
stack
para permitir la deducción a partir del tipo de contenedor subyacente.
Estas sobrecargas participan en la resolución de sobrecarga solo si
-
InputIt(si existe) satisface LegacyInputIterator , -
Container(si existe) no satisface Allocator , -
para
(3)
(until C++23)
(4)
(since C++23)
,
Allocsatisface Allocator , y -
std::
uses_allocator_v
<
Container, Alloc
>
es
true
si tanto
ContainercomoAllocexisten.
Nota: el grado en que la biblioteca determina que un tipo no satisface
LegacyInputIterator
no está especificado, excepto que como mínimo los tipos integrales no califican como iteradores de entrada. Del mismo modo, el grado en que determina que un tipo no satisface
Allocator
no está especificado, 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 trata como un operando no evaluado.
Notas
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_adaptor_iterator_pair_constructor
|
202106L
|
(C++23) | Constructores de par de iteradores para std::queue y std::stack ; sobrecargas (2) y (4) |
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construcción e inserción conscientes de rangos; sobrecargas (5) y (6) |
Ejemplo
#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>> }