https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111421
Bug ID: 111421 Summary: constexpr not working with array subscript Product: gcc Version: 13.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: malekwryyy at gmail dot com Target Milestone: --- Created attachment 55903 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=55903&action=edit the c program that results in the error compiled with: -std=c2x -Wall -Wextra When trying to subscript a constexpr array, the compiler says the expression is not constant. I would expect if the index is an integer literal (or a constexpr integer) then the resulting expression should still be constant. I tried this with -std=c2x and -std=gnu2x // program start typedef struct S { int i; } S; constexpr int a = (constexpr S){.i = 3}.i; // works as expected constexpr int b = ( &(constexpr S){.i = 3} )->i; // works as expected constexpr int y = (constexpr int[]){3}[0]; // doesn't work. Compiler says expression not constant int main() { return 0; } // program end the compiler error I get is: <source>:7:19: error: initializer element is not constant 7 | constexpr int y = (constexpr int[]){3}[0]; // doesn't work. Compiler says expression not constant | ^ <source>:7:15: warning: 'y' defined but not used [-Wunused-const-variable=] 7 | constexpr int y = (constexpr int[]){3}[0]; // doesn't work. Compiler says expression not constant | ^ <source>:5:15: warning: 'b' defined but not used [-Wunused-const-variable=] 5 | constexpr int b = ( &(constexpr S){.i = 3} )->i; // works as expected | ^ <source>:3:15: warning: 'a' defined but not used [-Wunused-const-variable=] 3 | constexpr int a = (constexpr S){.i = 3}.i; // works as expected | ^ Compiler returned: 1