deduction guides for
std::basic_string
|
Definiert in Header
<string>
|
||
|
template
<
class
InputIt,
class
Alloc
=
std::
allocator
<
typename
std::
iterator_traits
|
(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
die Anforderungen eines
LegacyInputIterator
erfüllt und
Alloc
die Anforderungen eines
Allocator
erfüllt.
Alloc
die Anforderungen eines
Allocator
erfüllt.
size_type
-Parametertyp bezieht sich auf den geschachtelten Typ
size_type
des durch den Deduction Guide abgeleiteten Typs.
input_range
zu ermöglichen.
Hinweis: Das Ausmaß, in dem die Bibliothek feststellt, dass ein Typ nicht
LegacyInputIterator
erfüllt, ist nicht spezifiziert, außer dass mindestens integrale Typen nicht als Input-Iteratoren qualifizieren. Ebenso ist das Ausmaß, in dem sie feststellt, dass ein Typ nicht
Allocator
erfüllt, nicht spezifiziert, außer dass mindestens der Member-Typ
Alloc::value_type
existieren muss und der Ausdruck
std::
declval
<
Alloc
&
>
(
)
.
allocate
(
std::
size_t
{
}
)
wohlgeformt sein muss, wenn er als nicht ausgewerteter Operand behandelt wird.
Inhaltsverzeichnis |
Hinweise
Führungen ( 2,3 ) werden benötigt, weil die std::basic_string -Konstruktoren für std::basic_string_view s als Templates implementiert sind, um Mehrdeutigkeiten in bestehendem Code zu vermeiden, und diese Templates die Klassentemplate-Argumentableitung nicht unterstützen.
Hinweise
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Ranges-bewusste Konstruktion und Einfügung; Überladung ( 4 ) |
Beispiel
#include <cassert> #include <string> #include <vector> int main() { std::vector<char> v = {'a', 'b', 'c'}; std::basic_string s1(v.begin(), v.end()); // verwendet 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); // verwendet Deduction Guide (4) assert(s4 == L"C++23"); #endif }
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 |
Deduktion von
basic_string_view
wurde nicht unterstützt
(verschärft durch LWG Issue 2946 ) |
Deduktionsanleitungen hinzugefügt |