constexpr std::optional 重置
constexpr std::optional reset
我正在审查 C++-17 std::optional
class 模板的接口,并注意到 nullopt
中的 reset
and assignment
未标记为 constexpr。
这是疏忽还是无法将此操作标记为 constexpr 的原因?
有一个原因,就是[expr.const]之前禁止的:
an assignment expression or invocation of an assignment operator ([class.copy]) that would change the active member of a union;
由于 P1330: Changing the active member of a union inside constexpr,该限制不再存在,这使得所有这些事情更容易实现(这篇论文实际上只是删除了我上面引用的要点)。
optional
的复制和移动赋值(但 none 的其他赋值)是 constexpr
的原因是因为它们只能默认为普通类型。
我正在审查 C++-17 std::optional
class 模板的接口,并注意到 nullopt
中的 reset
and assignment
未标记为 constexpr。
这是疏忽还是无法将此操作标记为 constexpr 的原因?
有一个原因,就是[expr.const]之前禁止的:
an assignment expression or invocation of an assignment operator ([class.copy]) that would change the active member of a union;
由于 P1330: Changing the active member of a union inside constexpr,该限制不再存在,这使得所有这些事情更容易实现(这篇论文实际上只是删除了我上面引用的要点)。
optional
的复制和移动赋值(但 none 的其他赋值)是 constexpr
的原因是因为它们只能默认为普通类型。