• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <expected>

    std::expected.void::swap

    // expected<cv void, E>部分特殊化
    constexpr void swap(expected& rhs) noexcept(see below);
    

    概要

    他のexpectedオブジェクトとデータを入れ替える。

    動作説明用のexpectedクラスメンバ変数として、下記を導入する。

    • unex : E型のエラー値。
    • has_val : bool型のフラグ変数。正常値を保持する場合はtrueに、エラー値を保持する場合はfalseとなる。

    テンプレートパラメータ制約

    次の制約を全て満たすこと

    効果

    *thisrhsそれぞれが正常値/エラー値いずれを保持しているかに応じて、以下の効果を持つ。

    • *thisrhsともに正常値を保持していれば、なにもしない
    • *thisrhsともにエラー値を保持していれば、次と等価 : using std::swap; swap(unex, rhs.unex);
    • *thisがエラー値をrhsが正常値を保持していれば、次と等価 : rhs.swap(*this);
    • *thisが正常値をrhsがエラー値を保持していれば、次と等価 :
      construct_at(addressof(unex), std::move(rhs.unex));
      destroy_at(addressof(rhs.unex));
      has_val = false;
      rhs.has_val = true;
      

    戻り値

    なし

    例外

    noexcept例外指定は次の式に従う :

    is_nothrow_move_constructible_v<E> && is_nothrow_swappable_v<E>

    noexcept例外指定がfalseの場合、上記の「効果」による処理からの例外がスローされる。

    #include <cassert>
    #include <expected>
    
    int main()
    {
      std::expected<void, int> x;
      std::expected<void, int> y = std::unexpected{42};
      assert(x.has_value() && y.error() == 42);
    
      x.swap(y);
      assert(x.error() == 42 && y.has_value());
    }
    

    出力

    バージョン

    言語

    • C++23

    処理系

    参照