constexpr std:: необязательный сброс
Я рассматривал интерфейс для C++-17 std::optional
шаблон класса и заметил, что reset
а также assignment
от nullopt
не отмечены как constexpr.
Был ли это недосмотр или есть причина, по которой эта операция не может быть помечена как constexpr?
1 ответ
Была причина, по которой [expr.const] ранее запрещал:
выражение присваивания или вызов оператора присваивания ([class.copy]), который изменяет активный член объединения;
Это ограничение больше не существует в результате P1330: изменение активного члена объединения внутри constexpr, что делает все эти вещи намного проще для реализации (статья буквально просто удаляет маркер, который я цитировал выше).
Причина того, что optional
Скопировать и переместить назначение (но ни одно из других назначений) были constexpr
было потому, что они могут быть просто по умолчанию для тривиальных типов.