2
私はstd::optional
を実装するために、実際にはconstexpr
をサポートしています。これを実装しようとしている私は解決することができていないこの問題の一つに着いたときconstexpr std ::任意の実装可能
constexpr optional<int> x(123);
int arr[*x];
::optional<T>
オブジェクトの内部では、私は値を格納するstd::aligned_storage_t<sizeof (T), alignof (T)>
オブジェクトを使用して、使用法は次のようになりますoptional<T>
のコンストラクタに新しい配置を使用して、値をストレージに組み込みます。
constexpr optional(const T& value)
noexcept(std::is_nothrow_copy_constructible<T>::value)
: ...
{
new (ptr_to_storage) T(value); // this breaks `constexpr`
}
は、他にどのように私はこれを実装することができます。しかし、新しい配置がconstexpr
コンストラクタの内部で使用することはできませんか?
うわー、それは本当に私が今までに予想されるだろうとずっと多くのコードです。 –
@ZizhengTaiようこそC++へ – James
@jamesようこそ、C++に近い言語レベルの機能を実装することを歓迎します。 ;) – Yakk