Четко ли определена в 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;
  }
};

Однако я не убежден, и есть вопросы, которые вызывают у меня удивление:

  1. Между и здесь существует псевдоним. Разрешено ли это, даже если объект представляет собой законченный объект и не обеспечивает хранения данных внутри?
  2. Даже если строгий псевдоним не нарушается, не нарушается лиcсами по себе остаются действительными, учитывая, что срок службыcharзакончился и учитывая, что он не обеспечивает хранилище?
  3. Применяется ли актерский состав дляbool&не требуютstd::launder, учитывая, что происхождение полученной ссылки не ведет кboolобъект?

Примечание. Это родственный вопрос: четко ли определена в P2641 авторская реализация опционального &amp;lt;bool&amp;gt; на основе объединения?в котором обсуждается другая реализация.

0 ответов

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