Namespaces
Variants

std::swap(std::variant)

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support du langage
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (déprécié en C++20)
 
 
Défini dans l'en-tête <variant>
template< class... Types >
void swap( std::variant<Types...>& lhs,
           std::variant<Types...>& rhs ) noexcept(/* see below */);
(depuis C++17)
(constexpr depuis C++20)

Surcharge l'algorithme std::swap pour std::variant. Appelle effectivement lhs.swap(rhs).

Cette surcharge participe à la résolution de surcharge seulement si std::is_move_constructible_v<T_i> et std::is_swappable_v<T_i> sont tous deux true pour tout T_i dans Types....

Paramètres

lhs, rhs - variant objets dont les valeurs doivent être échangées

Valeur de retour

(aucun)

Exceptions

noexcept spécification :
noexcept ( noexcept ( lhs. swap ( rhs ) ) )

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_variant 202106L (C++20)
(DR)
std::variant entièrement constexpr

Exemple

#include <iostream>
#include <string>
#include <variant>
void print(auto const& v, char term = '\n')
{
    std::visit([](auto&& o) { std::cout << o; }, v);
    std::cout << term;
}
int main()
{
    std::variant<int, std::string> v1{123}, v2{"XYZ"};
    print(v1, ' ');
    print(v2);
    std::swap(v1, v2);
    print(v1, ' ');
    print(v2);
    std::variant<double, std::string> v3{3.14};
    // std::swap(v1, v3); // ERREUR : ~ paramètres incohérents
}

Sortie :

123 XYZ
XYZ 123

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é
P2231R1 C++20 swap n'était pas constexpr alors que les opérations requises peuvent être constexpr en C++20 rendu constexpr

Voir aussi

échange avec un autre variant
(fonction membre publique)