Можно ли спроектировать std::optional
(в настоящее время std::experimental::optional
) таким образом, чтобы для тривиально конструируемого по умолчанию типа T
соответствующий std::optional< T >
также был тривиально конструируемым по умолчанию?
Тот же вопрос относительно std::variant
и его интегрального дискриминатора.
Мой собственный ответ: «Нет, это не может быть спроектировано таким образом, потому что значение его интегрального дискриминатора, полученное во время инициализации по умолчанию, будет неопределенным, если объект имеет автоматическую продолжительность хранения или если он reinterpret_cast
-ed из ненулевой инициализированной памяти ." Требование к пользователю выполнять инициализацию значения каждый раз недопустимо, на мой взгляд.
optional
илиvariant
) должен быть как можно более универсальным, не так ли? Я пытаюсь спроектироватьvariant
для constexpr. И в настоящее время он имеет выше способности. Но я думаю, может, мне стоит это отрицать? - person Tomilov Anatoliy   schedule 03.12.2015variant
. Инициализированные по умолчанию объекты ведут себя по-разному во время компиляции (constexpr) и во время выполнения. Затем я прочитал об инициализации. И обнаружил, что есть UB для использования моего инициализированного по умолчаниюvariant
в стеке. - person Tomilov Anatoliy   schedule 03.12.2015