Namespaces
Variants

deduction guides for std::forward_list

From cppreference.net

Défini dans l'en-tête <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) (depuis 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) (depuis C++23)
1) Ce guide de déduction est fourni pour forward_list afin de permettre la déduction à partir d'une plage d'itérateurs. Cette surcharge participe à la résolution de surcharge seulement si InputIt satisfait LegacyInputIterator et Alloc satisfait Allocator .
2) Ce guide de déduction est fourni pour forward_list afin de permettre la déduction à partir d'un std::from_range_t tag 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é.

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_containers_ranges 202202L (C++23) Construction et insertion compatibles avec les gammes ; surcharge (2)

Exemple

#include <forward_list>
#include <vector>
int main()
{
    std::vector<int> v = {1, 2, 3, 4};
    // utilise un guide de déduction explicite pour déduire std::forward_list<int>
    std::forward_list x(v.begin(), v.end());
    // déduit std::forward_list<std::vector<int>::iterator>
    // la première phase de la résolution de surcharge pour l'initialisation de liste sélectionne le candidat
    // synthétisé à partir du constructeur de liste d'initialiseurs ; la deuxième phase n'est pas effectuée
    // et le guide de déduction n'a aucun effet
    std::forward_list y{v.begin(), v.end()};
}