[Bug c++/105407] New: std::construct_at during constant evaluation does not zero-initialize
fchelnokov at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Apr 27 13:48:20 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105407
Bug ID: 105407
Summary: std::construct_at during constant evaluation does not
zero-initialize
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: fchelnokov at gmail dot com
Target Milestone: ---
This example program:
```
#include <memory>
#include <iostream>
struct A {
int x = x;
};
constexpr int foo() {
A a{1};
std::construct_at<A>(&a);
return a.x;
}
int main() {
constexpr int v = foo();
std::cout << v << foo();
}
```
shall print "00" (as Clang and MSVC do), because before "x=x" std::construct_at
must zero-initialize (a), see https://eel.is/c++draft/dcl.init#general-9.1.2
GCC prints "10" (demo: https://gcc.godbolt.org/z/eoEr5KMjM) meaning that it
behaves correctly in run-time, but not during constant evaluation.
More information about the Gcc-bugs
mailing list