Namespaces
Variants

deduction guides for std::basic_string

From cppreference.net
std::basic_string
Défini dans l'en-tête <string>
template < class InputIt,

class Alloc = std:: allocator < typename std:: iterator_traits
< InputIt > :: value_type > >
basic_string ( InputIt, InputIt, Alloc = Alloc ( ) )
- > basic_string < typename std:: iterator_traits < InputIt > :: value_type ,
std:: char_traits
< typename std:: iterator_traits < InputIt > :: value_type > ,

Alloc > ;
(1) (depuis C++17)
template < class CharT,

class Traits,
class Alloc = std:: allocator < CharT > >
explicit basic_string ( std:: basic_string_view < CharT, Traits > ,
const Alloc & = Alloc ( ) )

- > basic_string < CharT, Traits, Alloc > ;
(2) (depuis C++17)
template < class CharT,

class Traits,
class Alloc = std:: allocator < CharT > >
basic_string ( std:: basic_string_view < CharT, Traits > ,
typename /* voir ci-dessous */ :: size_type ,
typename /* voir ci-dessous */ :: size_type ,
const Alloc & = Alloc ( ) )

- > basic_string < CharT, Traits, Alloc > ;
(3) (depuis C++17)
template < ranges:: input_range R,

class Alloc = std:: allocator < ranges:: range_value_t < R >> >
basic_string ( std:: from_range_t , R && , Alloc = Alloc ( ) )
- > basic_string < ranges:: range_value_t < R > ,

std:: char_traits < ranges:: range_value_t < R >> , Alloc > ;
(4) (depuis C++23)
1) Ce guide de déduction est fourni pour std::basic_string afin de permettre la déduction à partir d'une plage d'itérateurs. Cette surcharge participe à la résolution de surcharge uniquement si InputIt satisfait LegacyInputIterator et Alloc satisfait Allocator .
2,3) Ces guides de déduction sont fournis pour std::basic_string afin de permettre la déduction à partir d'un std::basic_string_view . Ces surcharges participent à la résolution de surcharge uniquement si Alloc satisfait Allocator .
3) Le paramètre de type size_type fait référence au type imbriqué size_type du type déduit par le guide de déduction.
4) Ce guide de déduction est fourni pour std::basic_string afin de permettre la déduction à partir d'un tag std::from_range_t et d'un 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
}
Seul le texte "Run this code" a été traduit en "Exécuter ce code". Les commentaires en C++ ont également été traduits : - "// uses deduction guide (1)" → "// utilise le guide de déduction (1)" - "// uses deduction guide (4)" → "// utilise le guide de déduction (4)" Tous les autres éléments (balises HTML, code C++, attributs, termes techniques) ont été conservés intacts comme demandé.

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