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

履歴 編集

function
<variant>

std::variant::swap(C++17)

void swap(variant& rhs) noexcept(see below);            // C++17
constexpr void swap(variant& rhs) noexcept(see below);  // C++23

概要

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

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

効果

戻り値

なし

例外

  • index() == rhs.index()である場合、そのインデックスの型をTiとして、Ti型同士のswap操作が任意の例外を送出する可能性がある。そうでない場合、*thisが保持する型をTirhsが保持する型をTjとして、TiTjのムーブコンストラクタが任意の例外を送出する可能性がある
  • swap(get<I>(*this), get<I>(rhs))の呼び出し中に例外が発生した場合、*thisrhsは、Ti型のswap操作がもつ例外安全性が保証する状態となる
  • それ以外の状態での*thisrhsの入れ替え中に例外が発生した場合、*thisrhsの状態は、variantのムーブコンストラクタの例外安全保証によって決まる
  • noexcept内の式は、Types...の全ての型Tiについて、is_nothrow_move_constructible_v<Ti> && is_nothrow_swappable_v<Ti>を論理積としたものと等価になる

#include <cassert>
#include <variant>

int main()
{
  std::variant<int, char, double> a = 1;
  std::variant<int, char, double> b = 3.14;

  a.swap(b);

  assert(std::holds_alternative<double>(a));
  assert(std::holds_alternative<int>(b));

  assert(std::get<double>(a) == 3.14);
  assert(std::get<int>(b) == 1);
}

出力

バージョン

言語

  • C++17

処理系

参照