constexpr std ::可选重置

apm*_*ney 10 c++ constexpr c++17 stdoptional

我正在审查C++ - 17 std::optional类模板的接口,并注意到resetassignment来自nullopt未标记为constexpr.

这是疏忽还是有理由说这个操作不能标记为constexpr?

Bar*_*rry 9

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

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

P1330导致该限制不再存在:在constexpr中更改联合的活动成员,这使得所有这些事情更容易实现(该文章只是删除了我上面引用的要点).

之所以称optional的复制和移动作业(但没有其他任务的)均constexpr是因为他们可以被默认为琐碎的类型.

  • @Rakete1111好吧,[现在有](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2231r0.html)。 (2认同)