https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99700
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |msebor at gcc dot gnu.org Summary|gcc takes an uninitialized |uninitialized variable |variable as a constant |accepted as a constant |expression |expression in C++ 20 Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2021-04-15 --- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> --- Confirmed with -std=c++20. In earlier modes GCC rejects the test case as expected. $ (set -x && gcc -O2 -S -Wall -std=c++20 pr99700.C && gcc -O2 -S -Wall -std=c++17 pr99700.C) + gcc -O2 -S -Wall -std=c++20 pr99700.C + gcc -O2 -S -Wall -std=c++17 pr99700.C pr99700.C: In constructor ‘constexpr A::A()’: pr99700.C:2:29: error: member ‘A::c’ must be initialized by mem-initializer in ‘constexpr’ constructor 2 | constexpr A() { c[0] = 0; } | ^ pr99700.C:3:8: note: declared here 3 | char c[2]; | ^ pr99700.C: At global scope: pr99700.C:6:13: error: ‘constexpr A::A()’ called in a constant expression 6 | constexpr A a; | ^ pr99700.C:2:13: note: ‘constexpr A::A()’ declared here 2 | constexpr A() { c[0] = 0; } | ^ When reporting bugs please include all the information we ask for here: https://gcc.gnu.org/bugs/#need. Links to other sites are not a substitute.