【发布时间】:2016-06-18 07:24:25
【问题描述】:
我正在尝试实施std::optional 和constexpr 支持作为一种实践。用法如下:
constexpr optional<int> x(123);
int arr[*x];
在尝试实现这一点时,我遇到了一个我无法解决的问题:在optional<T> 对象中,我使用std::aligned_storage_t<sizeof (T), alignof (T)> 对象来存储值,并在optional<T> 中使用placement new的构造函数将值构造到存储中。但是placement new不能在constexpr构造函数中使用:
constexpr optional(const T& value)
noexcept(std::is_nothrow_copy_constructible<T>::value)
: ...
{
new (ptr_to_storage) T(value); // this breaks `constexpr`
}
我还能如何实现这个?
【问题讨论】: