Spec-Zone.ru › C++

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

См. также

swap
обменивает содержимое
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/expected/swap2

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API