Была причина, по которой [expr.const] ранее запрещал:
выражение присваивания или вызов оператора присваивания ([class.copy]) который изменил бы активный член объединения;
Это ограничение больше не существует в результате P1330: изменение активного члена объединения внутри constexpr , что делает всеиз этих вещей гораздо проще реализовать (статья буквально просто удаляет точку маркера, которую я цитировал выше).
Причина, по которой optional
скопировала и переместила назначение (но ни одно из других назначений), была constexpr
потому что они могут быть просто по умолчанию для тривиальных типов.