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

履歴 編集

class template
<variant>

std::monostate(C++17)

namespace std {
  struct monostate {};
}

概要

monostateは、variantに空の状態を持たせるための空のクラスである。

variantは、候補型のうち0番目の型の値をデフォルトで保持する。そのため、エラーによって空になることはあっても、通常の操作として「空」を表現できない。

variantの候補型としてmonostateを指定し、そのオブジェクトを保持させることで、擬似的に空の状態を表現できる。候補型の0番目にmonostateを指定することで、variantデフォルト構築状態を空にできる。

備考

メンバ関数

構築・破棄

名前 説明 対応バージョン
monostate() = default; コンストラクタ C++17
~monostate() = default; デストラクタ C++17
monostate& operator=(const monostate&) = default;
monostate& operator=(monostate&&) = default;
代入演算子 C++17

非メンバ関数

比較演算子

名前 説明 対応バージョン
constexpr bool operator==(monostate, monostate) noexcept; 等値比較。trueを返す C++17
constexpr bool operator!=(monostate, monostate) noexcept; 非等値比較。falseを返す (C++20から==により使用可能) C++17
constexpr strong_ordering operator<=>(monostate, monostate) noexcept; 三方比較。strong_ordering::equalを返す C++20
constexpr bool operator<(monostate, monostate) noexcept; 左辺が右辺より小さいかを判定する。falseを返す (C++20から<=>により使用可能) C++17
constexpr bool operator<=(monostate, monostate) noexcept; 左辺が右辺以下かを判定する。trueを返す (C++20から<=>により使用可能) C++17
constexpr bool operator>(monostate, monostate) noexcept; 左辺が右辺より大きいかを判定する。falseを返す (C++20から<=>により使用可能) C++17
constexpr bool operator>=(monostate, monostate) noexcept; 左辺が右辺以上かを判定する。trueを返す (C++20から<=>により使用可能) C++17

#include <iostream>
#include <variant>

int main()
{
  // デフォルト構築で空にする
  std::variant<std::monostate, int, double> v;

  if (std::holds_alternative<std::monostate>(v)) {
    std::cout << "empty" << std::endl;
  }

  v = 1;
  v = std::monostate{}; // 空にする
}

出力

empty

バージョン

言語

  • C++17

処理系

参照