constexpr std :: Optional reset

时间:2018-12-20 21:25:33

标签: c++ c++17 constexpr stdoptional

我正在查看C ++-17 std::optional类模板的接口,并注意到nullopt中的resetassignment没有标记为constexpr。

这是疏忽大意还是有原因无法将该操作标记为constexpr?

1 个答案:

答案 0 :(得分:9)

有一个原因是[expr.const]以前禁止:

  

一个赋值表达式或一个赋值运算符([class.copy])的调用将更改联合的活动成员;

由于P1330: Changing the active member of a union inside constexpr的存在,该限制不再存在,这使得所有这些事情都更易于实现(本文从字面上删除了我上面引用的要点)。

optional的复制和移动分配(但没有其他分配)是constexpr的原因是,它们仅可用于普通类型。