如this page所示,std::optional<T>::value_or
的右值反对限定版本未标记为constexpr
:
template< class U >
constexpr T value_or( U&& default_value ) const&;
template< class U >
T value_or( U&& default_value ) &&;
这背后的原因是什么?是因为值的移动可以修改optional
对象吗?
但如果我们将&&
版本也设为constexpr
,我们现在写的不是很好:
constexpr int x = std::optional<int>(123).value_or(456);