We were forgetting to clear m_has_value in the Optional being moved from when using operator=(Optional&&).