Orient Orient - 2 months ago 10
C++ Question

trivially default constructible std::optional and std::variant

Is it permitable to design

std::optional
(currently
std::experimental::optional
) in such a way, that for trivially default constructible type
T
corresponding
std::optional< T >
is also trivially default constructible?

The same question regading
std::variant
and its integral discriminator.

My own answer is: "No, it cannot be designed in this way, because value of its integral discriminator obtained during default initialization will be indeterminate if the object has automatic storage duration or if it is
reinterpret_cast
-ed from non-zero-initialized storage." Requirement to the user to do value-initialization every time is not allowed on my mind.

Answer

Your answer is correct: you cannot. The specification requires that its "initialized flag" is set to false upon default construction.

Comments