std::swap(std::variant)
Aus de.cppreference.net
| Definiert in Header <variant>
|
||
template< class... Types >
void swap( std::variant<Types...>& lhs,
std::variant<Types...>& rhs ) noexcept(/* see below */);
|
(seit C++17) (constexpr seit C++20) |
|
Überlädt den std::swap-Algorithmus für std::variant. Ruft effektiv lhs.swap(rhs) auf.
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.
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
Diesen Code ausführen
#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) |