std::monostate ≠ “空”类型
C++17 存在一个不起眼的类型 std::monostate,引入背景是 std::variant 需要允许默认构造,而如果它所有的候选类型都不支持默认构造,那就可以将 std::monostate 作为第一个候选类型来避免无效状态。
一个小例子:
struct S {
explicit S(int) {}
};
// Error: the first alternative is not default constructible.
std::variant<S> v;
// OK
std::variant<std::monostate, S> w;
因此,std::monostate 也被放到了 <variant>,定义很简单:
struct monostate {};
许多人容易把它当成是一个“空”类型,但从严格意义上来讲,它同 void 一样,是一个单值类型。… Continue Reading