Четко ли определена в P2641 авторская реализация опционального<bool> на основе приведения типов?
В P2641r4: Проверка активности альтернативы объединения автор предоставляет реализациюoptional<bool>
в качестве мотивирующего примера и утверждает, что это правильно сформулировано.
struct OptBool { char c; OptBool() : c(2) { } OptBool(bool b) { new (&c) bool(b); } auto has_value() const -> bool { return c != 2; } auto operator*() -> bool& { return (bool&)c; } };
Однако я не убежден, и есть вопросы, которые вызывают у меня удивление:
- Между и здесь существует псевдоним. Разрешено ли это, даже если объект представляет собой законченный объект и не обеспечивает хранения данных внутри?
- Даже если строгий псевдоним не нарушается, не нарушается ли
c
сами по себе остаются действительными, учитывая, что срок службыchar
закончился и учитывая, что он не обеспечивает хранилище? - Применяется ли актерский состав для
bool&
не требуютstd::launder
, учитывая, что происхождение полученной ссылки не ведет кbool
объект?
Примечание. Это родственный вопрос: четко ли определена в P2641 авторская реализация опционального &lt;bool&gt; на основе объединения?в котором обсуждается другая реализация.