Namespaces
Variants

deduction guides for std::forward_list

From cppreference.net

Definiert im Header <forward_list>
template < class InputIt,

class Alloc = std:: allocator <
typename std:: iterator_traits < InputIt > :: value_type > >
forward_list ( InputIt, InputIt, Alloc = Alloc ( ) )

- > forward_list < typename std:: iterator_traits < InputIt > :: value_type , Alloc > ;
(1) (seit C++17)
template < ranges:: input_range R,

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

- > forward_list < ranges:: range_value_t < R > , Alloc > ;
(2) (seit C++23)
1) Dieser Deduction Guide wird für forward_list bereitgestellt, um die Ableitung aus einem Iteratorbereich zu ermöglichen. Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn InputIt die Anforderungen eines LegacyInputIterator erfüllt und Alloc die Anforderungen eines Allocator erfüllt.
2) Dieser Deduction Guide wird für forward_list bereitgestellt, um die Ableitung von einem std::from_range_t -Tag und einem input_range zu ermöglichen.

Hinweis: Das Ausmaß, in dem die Bibliothek feststellt, dass ein Typ nicht die Anforderungen eines LegacyInputIterator erfüllt, ist nicht spezifiziert, außer dass mindestens integrale Typen nicht als Eingabe-Iteratoren qualifizieren. Ebenso ist das Ausmaß, in dem sie feststellt, dass ein Typ nicht die Anforderungen eines 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.

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Ranges-bewusste Konstruktion und Einfügung; Überladung (2)

Beispiel

#include <forward_list>
#include <vector>
int main()
{
    std::vector<int> v = {1, 2, 3, 4};
    // verwendet expliziten Deduction Guide um std::forward_list<int> abzuleiten
    std::forward_list x(v.begin(), v.end());
    // leitet std::forward_list<std::vector<int>::iterator> ab
    // erste Phase der Überlösungsauflösung für Listeninitialisierung wählt den Kandidaten
    // synthetisiert vom Initializer-List-Konstruktor; zweite Phase wird nicht durchgeführt
    // und Deduction Guide hat keine Wirkung
    std::forward_list y{v.begin(), v.end()};
}