为什么在C ++ 17中std :: variant允许std :: variant <int,const =“”int =“”>

时间:2016-11-04 23:12:34

标签: c++ c++17

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

那为什么允许=INDEX($P$2:$P$501,MATCH(M2,$O$2:$O$501,0))

是有道理的

1 个答案:

答案 0 :(得分:1)

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

相关段落说:

  

variant<int, const int> variant可以处理const类型:它们   只能通过variant构建和emplace()进行设置。如果   const和非const类型都是替代品,活跃的   替代方法是由常规构造函数实例化/重载选择的   规则,就像任何其他可能匹配的替代类型一样。

因此,就理据而言,通过关于替代方案的部分,我们可以说:

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