swap(std::expected)
friend constexpr void swap( expected& lhs, expected& rhs ) noexcept(/*see below*/); | (начиная с C++23) |
Перегружает алгоритм std::swap для std::expected. Обменивает состояние lhs на состояние rhs. Фактически вызывает lhs.swap(rhs).
Эта перегрузка участвует в разрешении перегрузки только если допустимо lhs.swap(rhs).
Эта функция не видна при обычном неквалифицированном или квалифицированном поиске и может быть найдена только с помощью поиска, зависящего от аргументов, если std::expected<T,E> является связанным классом аргументов.
Параметры
| lhs, rhs | - |
объекты expected, состояния которых нужно обменять |
Возвращаемое значение
(отсутствует)
Исключения
noexcept спецификация: noexcept(noexcept(lhs.swap(rhs)))
Пример
#include <expected>
#include <iostream>
#include <string>
using Ex = std::expected<std::string, int>;
void show(const Ex& ex1, const Ex& ex2)
{
for (int i{}; i < 2; ++i)
{
std::cout << (i ? "ex2" : "ex1");
if (const Ex& ex = (i ? ex2 : ex1); ex.has_value())
std::cout << ".has_value() = " << *ex << '\n';
else
std::cout << ".error() = " << ex.error() << '\n';
}
}
int main()
{
Ex ex1("\N{DOG FACE}");
Ex ex2{"\N{BONE}"};
show(ex1, ex2);
swap(ex1, ex2);
std::cout << "swap(ex1, ex2);\n";
show(ex1, ex2);
std::cout << '\n';
ex2 = std::unexpected(13);
show(ex1, ex2);
swap(ex1, ex2);
std::cout << "swap(ex1, ex2);\n";
show(ex1, ex2);
std::cout << '\n';
ex2 = std::unexpected(19937);
show(ex1, ex2);
swap(ex1, ex2);
std::cout << "swap(ex1, ex2);\n";
show(ex1, ex2);
std::cout << '\n';
}
Вывод:
ex1.has_value() = 🐶 ex2.has_value() = 🦴 swap(ex1, ex2); ex1.has_value() = 🦴 ex2.has_value() = 🐶 ex1.has_value() = 🦴 ex2.error() = 13 swap(ex1, ex2); ex1.error() = 13 ex2.has_value() = 🦴 ex1.error() = 13 ex2.error() = 19937 swap(ex1, ex2); ex1.error() = 19937 ex2.error() = 13
См. также
| обменивает содержимое (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/expected/swap2