constexpr std:: необязательный сброс

Я рассматривал интерфейс для C++-17 std::optional шаблон класса и заметил, что reset а также assignment от nullopt не отмечены как constexpr.

Был ли это недосмотр или есть причина, по которой эта операция не может быть помечена как constexpr?

1 ответ

Решение

Была причина, по которой [expr.const] ранее запрещал:

выражение присваивания или вызов оператора присваивания ([class.copy]), который изменяет активный член объединения;

Это ограничение больше не существует в результате P1330: изменение активного члена объединения внутри constexpr, что делает все эти вещи намного проще для реализации (статья буквально просто удаляет маркер, который я цитировал выше).

Причина того, что optionalСкопировать и переместить назначение (но ни одно из других назначений) были constexpr было потому, что они могут быть просто по умолчанию для тривиальных типов.

Другие вопросы по тегам