Namespaces
Variants

std:: swap (std::variant)

From cppreference.net
Utilities library
Definiert im Header <variant>
template < class ... Types >

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

std:: variant < Types... > & rhs ) noexcept ( /* siehe unten */ ) ;
(seit C++17)
(constexpr seit C++20)

Überlädt den std::swap -Algorithmus für std::variant . Führt effektiv lhs. swap ( rhs ) aus.

Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_move_constructible_v < T_i > und std:: is_swappable_v < T_i > beide true für alle T_i in Types... sind.

Inhaltsverzeichnis

Parameter

lhs, rhs - variant Objekte, deren Werte ausgetauscht werden sollen

Rückgabewert

(keine)

Ausnahmen

noexcept Spezifikation:
noexcept ( noexcept ( lhs. swap ( rhs ) ) )

Hinweise

Feature-Test Makro Wert Std Funktion
__cpp_lib_variant 202106L (C++20)
(DR)
Vollständig constexpr std::variant

Beispiel

#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); // FEHLER: ~ inkonsistente Parameterpakete
}

Ausgabe:

123 XYZ
XYZ 123

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
P2231R1 C++20 swap war nicht constexpr während die erforderlichen Operationen in C++20 constexpr sein können als constexpr festgelegt

Siehe auch

tauscht mit einem anderen variant
(öffentliche Elementfunktion)