为什么 C++17 中的 std::variant 允许 std::variant<int, const int>

Why std::variant in C++17 allows std::variant<int, const int>

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0088r3.html 中有一个关于需要扩展 std::variant<int, const int> 的注释,并投票允许它,但我找不到实际的理由。

那么为什么允许 std::variant<int, const int> 有意义?

本文早期版本中存在的基本原理和讨论部分已分为 P0086 - Variant design review

相关段落说:

variant<int, const int> A variant can handle const types: they can only be set through variant construction and emplace(). If both const and non-const types are alternatives, the active alternative is chosen by regular constructor instantiation / overload rules, just as for any other possibly matching alternative types.

因此,就基本原理而言,查看替代方案部分我们可以说:

  • 对替代类型的要求越少,在模板代码中使用 variant 就越容易。 (否则,模板代码必须通过类型列表、删除 cv 限定符、消除重复项等,然后才能用它们实例化 variant。)
  • 一般允许 cv 限定类型,特别是具有不同 cv 限定的相同类型,可以使用从类型的性质自然流出的语义来实现。