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

            Bug ID: 102000
           Summary: Defaulted consteval default constructor that performs
                    no initialization is not rejected
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: johelegp at gmail dot com
                CC: johelegp at gmail dot com
  Target Milestone: ---

See https://godbolt.org/z/Te3nY7YeW and discussion at
https://cpplang.slack.com/archives/C21PKDHSL/p1629467874085000.
```C++
struct X{
  int i;
  consteval X() = default;
};
constexpr void f() {
  [[maybe_unused]] X x_f;
}
int main () {
  [[maybe_unused]] X x_main;
  []() consteval { f(); }();
}
```

```
    An immediate invocation shall be a constant expression. --
https://eel.is/c++draft/expr.const#13.sentence-3

Lots of wording in between...

    2 A variable or temporary object o is constant-initialized if
    (2.1) either it has an initializer or its default-initialization results in
some initialization being performed, and
    -- https://eel.is/c++draft/expr.const#2
    7 To default-initialize an object of type T means:
    (7.3) Otherwise, no initialization is performed.
    -- https://eel.is/c++draft/dcl.init.general#7
```

```
[W]hether it's defaulted or not, `i` is uninitialized so it should reject both.
```

Reply via email to