Интерфейс, все свойства и гарантии должны соответствовать std::variant. Специализацию std::hash
писать не надо.
По аналогии с заданием optional
, требуется по возможности сохранять тривиальности для special member functions. Также стоит уделить внимание правильности расстановки noexcept
.