deduction guides for
std::basic_string
|
Défini dans l'en-tête
<string>
|
||
|
template
<
class
InputIt,
class
Alloc
=
std::
allocator
<
typename
std::
iterator_traits
|
(1) | (depuis C++17) |
|
template
<
class
CharT,
class
Traits,
|
(2) | (depuis C++17) |
|
template
<
class
CharT,
class
Traits,
|
(3) | (depuis C++17) |
|
template
<
ranges::
input_range
R,
class
Alloc
=
std::
allocator
<
ranges::
range_value_t
<
R
>>
>
|
(4) | (depuis C++23) |
InputIt
satisfait
LegacyInputIterator
et
Alloc
satisfait
Allocator
.
Alloc
satisfait
Allocator
.
size_type
fait référence au type imbriqué
size_type
du type déduit par le guide de déduction.
input_range
.
Note : la mesure dans laquelle la bibliothèque détermine qu'un type ne satisfait pas
LegacyInputIterator
n'est pas spécifiée, sauf qu'au minimum les types entiers ne se qualifient pas comme itérateurs d'entrée. De même, la mesure dans laquelle elle détermine qu'un type ne satisfait pas
Allocator
n'est pas spécifiée, sauf qu'au minimum le type membre
Alloc::value_type
doit exister et l'expression
std::
declval
<
Alloc
&
>
(
)
.
allocate
(
std::
size_t
{
}
)
doit être bien formée lorsqu'elle est traitée comme un opérande non évalué.
Table des matières |
Notes
Guides de déduction ( 2,3 ) sont nécessaires car les std::basic_string constructeurs pour les std::basic_string_view sont rendus templates pour éviter de causer des ambiguïtés dans le code existant, et ces templates ne prennent pas en charge la déduction d'arguments de template de classe.
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Construction et insertion compatibles avec les gammes ; surcharge ( 4 ) |
Exemple
#include <cassert> #include <string> #include <vector> int main() { std::vector<char> v = {'a', 'b', 'c'}; std::basic_string s1(v.begin(), v.end()); // utilise le guide de déduction (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); // utilise le guide de déduction (4) assert(s4 == L"C++23"); #endif }
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3075 | C++17 |
la déduction depuis
basic_string_view
n'était pas prise en charge
(exacerbé par LWG issue 2946 ) |
guides de déduction ajoutés |