std::monostate (3) - Linux Manuals

std::monostate: std::monostate

NAME

std::monostate - std::monostate

Synopsis


Defined in header <variant>
struct monostate { }; (since C++17)


Unit type intended for use as a well-behaved empty alternative in std::variant. In particular, a variant of non-default-constructible types may list std::monostate as its first alternative: this makes the variant itself default-constructible.

Member functions


constructor trivial implicit default/copy/move constructor
                      (public member function)
(implicitly declared)


destructor trivial implicit destructor
                      (public member function)
(implicitly declared)


operator= trivial implicit copy/move assignment
                      (public member function)
(implicitly declared)

Non-member functions


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; }
constexpr bool operator==(monostate, monostate) noexcept { return true; }
constexpr bool operator!=(monostate, monostate) noexcept { return false; }


All instances of std::monostate compare equal.

Helper classes


 std::hash<std::monostate>


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


Specializes the std::hash algorithm for std::monostate.

Example


// Run this code


  #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';
  }

Output:


  12

See also


              constructs the variant object
constructor (public member function)