https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120088

            Bug ID: 120088
           Summary: Use of uninitialized value in constant expression when
                    copy-constructing a std::expected<void, int> from
                    another copy-assigned non-erroneous std::expected
           Product: gcc
           Version: 15.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: eddiejnolan at gmail dot com
  Target Milestone: ---

Clang and EDG both reject the following when building with libstdc++:

#include <expected>

constexpr bool quux() {
  std::expected<void, int> foo1{std::unexpected{0}};
  std::expected<void, int> foo2{};
  foo1 = foo2;
  [[maybe_unused]] std::expected<void, int> foo3{foo1};
  return true;
}

static_assert(quux());

Both of them complain about accessing an uninitialized object in a constant
expression, which Clang specifically flags as `_Er _M_unex;`.

Compiler Explorer link: https://godbolt.org/z/4ndvWfMMs

Reply via email to