名前空間
変種

std::monostate

提供: cppreference.com
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
 
<tbody> </tbody>
ヘッダ <variant> で定義
struct monostate { };
(C++17以上)

std::variant で行儀の良い空の選択肢として使うことが意図された単位型です。 特に、デフォルト構築可能でない型の variant は、 std::monostate をその最初の選択肢に持つことで、デフォルト構築可能になります。

メンバ関数

コンストラクタ
(暗黙に宣言)
トリビアルな暗黙のデフォルト/コピー/ムーブコンストラクタ
(パブリックメンバ関数)
デストラクタ
(暗黙に宣言)
トリビアルな暗黙のデストラクタ
(パブリックメンバ関数)
operator=
(暗黙に宣言)
トリビアルな暗黙のコピー/ムーブ代入演算子
(パブリックメンバ関数)

非メンバ関数

<tbody> </tbody>
constexpr bool operator==(monostate, monostate) noexcept { return true; }
(C++17以上)
constexpr bool operator!=(monostate, monostate) noexcept { return false; } constexpr bool operator<(monostate, monostate) noexcept { return false; } constexpr bool operator>(monostate, monostate) noexcept { return false; } constexpr bool operator<=(monostate, monostate) noexcept { return true; } constexpr bool operator>=(monostate, monostate) noexcept { return true; }
(C++17以上)
(C++20未満)
constexpr std::strong_ordering operator<=>(monostate, monostate) noexcept { return std::strong_ordering::equal; }
(C++20以上)

std::monostate のすべてのインスタンスは等しいものとして比較されます。

ヘルパークラス

std::hash<std::monostate>

<tbody> </tbody>
template <> struct std::hash<monostate>;

std::monostate に対する std::hash アルゴリズムの特殊化

#include <variant>
#include <iostream>

struct S
{
    S(int i) : i(i) {}
    int i;
};

int main() {
    
    // Without the monostate type this declaration will fail.
    // This is because S is not default-constructible.
    
    std::variant<std::monostate, S> var; 
    
    // var.index() is now 0 - the first element
    // std::get<S> will throw! We need to assign a value
    
    var = 12; 

    std::cout << std::get<S>(var).i << '\n';
}

出力:

12


関連項目

variant オブジェクトを構築します
(パブリックメンバ関数) [edit]