deduction guides for
std::basic_string
|
Definido en el encabezado
<string>
|
||
|
template
<
class
InputIt,
class
Alloc
=
std::
allocator
<
typename
std::
iterator_traits
|
(1) | (desde C++17) |
|
template
<
class
CharT,
class
Traits,
|
(2) | (desde C++17) |
|
template
<
class
CharT,
class
Traits,
|
(3) | (desde C++17) |
|
template
<
ranges::
input_range
R,
class
Alloc
=
std::
allocator
<
ranges::
range_value_t
<
R
>>
>
|
(4) | (desde C++23) |
InputIt
satisface
LegacyInputIterator
y
Alloc
satisface
Allocator
.
Alloc
satisface
Allocator
.
size_type
se refiere al tipo anidado
size_type
del tipo deducido por la guía de deducción.
input_range
.
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.
Contenidos |
Notas
Se necesitan guías de deducción ( 2,3 ) porque los constructores de std::basic_string para std::basic_string_view se implementan como plantillas para evitar causar ambigüedades en el código existente, y esas plantillas no admiten la deducción de argumentos de plantilla de clase.
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construcción e inserción con reconocimiento de rangos; sobrecarga ( 4 ) |
Ejemplo
#include <cassert> #include <string> #include <vector> int main() { std::vector<char> v = {'a', 'b', 'c'}; std::basic_string s1(v.begin(), v.end()); // utiliza la guía de deducción (1) assert(s1 == "abc"); #if __cpp_lib_containers_ranges >= 202202L std::vector<wchar_t> v4{0x43, 43, 053, 0x32, 0x33}; std::basic_string s4(std::from_range, v4); // utiliza la guía de deducción (4) assert(s4 == L"C++23"); #endif }
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3075 | C++17 |
la deducción desde
basic_string_view
no estaba soportada
(agravado por LWG issue 2946 ) |
se añadieron guías de deducción |