Namespaces
Variants

std:: swap (std::variant)

From cppreference.net
Utilities library
Défini dans l'en-tête <variant>
template < class ... Types >

void swap ( std:: variant < Types... > & lhs,

std:: variant < Types... > & rhs ) noexcept ( /* voir ci-dessous */ ) ;
(depuis C++17)
(constexpr depuis C++20)

Surcharge l'algorithme std::swap pour std::variant . Effectue un appel équivalent à 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 tous les T_i dans Types... .

Table des matières

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)