Deduktionshilfen für std::basic_string
| Definiert in Header <string> |
||
| template< class InputIt, class Alloc = std::allocator< typename std::iterator_traits<InputIt>::value_type> > |
(1) | (seit C++17) |
template< class CharT, class Traits, |
(2) | (seit C++17) |
| template< class CharT, class Traits, |
(3) | (seit C++17) |
template< ranges::input_range R, class Alloc = std::allocator<ranges::range_value_t<R>> > |
(4) | (seit C++23) |
InputIt LegacyInputIterator erfüllt und Alloc Allocator erfüllt.Alloc Allocator erfüllt.input_range zu ermöglichen.Hinweis: Das Ausmaß, in dem die Bibliothek feststellt, dass ein Typ LegacyInputIterator nicht erfüllt, ist undefiniert, außer dass als Minimum ganzzahlige Typen nicht als Eingabeiteratoren qualifizieren. Ebenso ist das Ausmaß, in dem die Bibliothek feststellt, dass ein Typ Allocator nicht erfüllt, undefiniert, außer dass als Minimum der Member-Typ Alloc::value_type existieren muss und der Ausdruck std::declval<Alloc&>().allocate(std::size_t{}) gut gebildet sein muss, wenn er als nicht ausgewerteter Operand behandelt wird.
Inhalt |
[bearbeiten] Hinweise
Die Hilfen (2,3) sind erforderlich, da die Konstruktoren von std::basic_string für std::basic_string_views Vorlagen sind, um Mehrdeutigkeiten in bestehendem Code zu vermeiden, und diese Vorlagen unterstützen keine Klassenvorlagenargumentableitung.
[bearbeiten] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Bereichsbezogene Konstruktion und Einfügung; Überladung (4) |
[bearbeiten] Beispiel
#include <cassert> #include <string> #include <vector> int main() { std::vector<char> v = {'a', 'b', 'c'}; std::basic_string s1(v.begin(), v.end()); // uses deduction guide (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); // uses deduction guide (4) assert(s4 == L"C++23"); #endif }
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3075 | C++17 | Deduction von basic_string_view wurde nicht unterstützt (verschärft durch LWG-Problem 2946) |
Deduktionshilfen hinzugefügt |