std::monostate
From cppreference.com
| ヘッダ <variant> で定義 |
||
| ヘッダ <utility> で定義 |
(C++26以降) |
|
| struct monostate { }; |
(C++17以降) | |
std::variant において、適切に振る舞う空の代替として使用されることを意図した単位型です。特に、デフォルト構築不可能な型の variant が std::monostate を最初の代替としてリストすると、variant 自体がデフォルト構築可能になります。
目次 |
[編集] メンバ関数
| (コンストラクタ) (暗黙的に宣言) |
自明な暗黙のデフォルト/コピー/ムーブコンストラクタ (public member function) |
| (デストラクタ) (暗黙的に宣言) |
自明な暗黙のデストラクタ (public member function) |
| operator= (暗黙的に宣言) |
自明な暗黙のコピー/ムーブ代入 (public member function) |
[編集] 非メンバ関数
std::operator==, !=, <, <=, >, >=, <=>(std::monostate)
| constexpr bool operator==( monostate, monostate ) noexcept { return true; } |
(1) | (C++17以降) |
| (2) | ||
constexpr bool operator!=( monostate, monostate ) noexcept { return false; } constexpr bool operator< ( monostate, monostate ) noexcept { return false; } |
(C++17以降) (C++20まで) |
|
| constexpr std::strong_ordering operator<=>( monostate, monostate ) noexcept { |
(C++20以降) | |
std::monostate のすべてのインスタンスは等しいと比較されます。
|
|
(C++20以降) |
[編集] ヘルパークラス
std::hash<std::monostate>
| template <> struct std::hash<monostate>; |
(C++17以降) | |
std::monostate のための std::hash アルゴリズムを特殊化します。
[編集] 例
このコードを実行
#include <cassert> #include <iostream> #include <variant> 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; assert(var.index() == 0); try { std::get<S>(var); // throws! We need to assign a value } catch(const std::bad_variant_access& e) { std::cout << e.what() << '\n'; } var = 42; std::cout << "std::get: " << std::get<S>(var).i << '\n' << "std::hash: " << std::hex << std::showbase << std::hash<std::monostate>{}(std::monostate{}) << '\n'; }
実行結果の例
std::get: wrong index for variant std::get: 42 std::hash: 0xffffffffffffe19f
[編集] 関連項目
variant オブジェクトを構築します(public メンバ関数) |