constexpr std :: необязательный сброс - PullRequest
0 голосов
/ 21 декабря 2018

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

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

1 Ответ

0 голосов
/ 21 декабря 2018

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

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

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

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

...