std::monostate was introduced to the <variant> header in C++17 as an official "empty" type, the primary use case being if you have a `std::variant` consisting of types which are not default constructible, but you would like your variant to be default-constructible, then making `std::monostate` the first variant member would be a better alternative than using `std::optional<std::variant<...>>` or something similar.
As
the implementation of std::monostate does not in any way depend on the implementation of std::variant, it could be useful for the same purpose with `absl::variant`, or in any other situation where you need a type with no state. I'm running into a use-case for this right now, where
I'd like to use a hash-map-like container as a hash-set. By using `std::monostate` as the value type I can make my intentions clear without wasting too much space (though `std::monostate` is still uniquely addressable, so it will take up at least a byte + padding).
Alternatives could be to use `std::nullptr_t` (though that
takes up more space, which is either surprising or unsurprising depending on how you think about it), create an `absl::monostate` implementation (though that might require adding abseil as a dependency to code that otherwise doesn't want that), or to create a bespoke "empty" type wherever this is needed.
I think the use-case for an "empty" type that isn't `void` appears often enough to make allowing this worthwhile.