https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106988
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|DUPLICATE |--- Status|RESOLVED |UNCONFIRMED Keywords|diagnostic |rejects-valid --- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> --- After experimenting with this some more I think the decision to reject this and the other similar requests should be reconsidered. GCC accepts many equivalent nonconstant expressions in contexts where they are required (see below). Rejecting the simplest of them seems arbitrary and is (as is evident from the duplicate requests) unhelpful to C programmers and surprising those used to the C++ behavior. $ cat a.c && gcc -S -Wall -Wpedantic a.c #include <string.h> _Static_assert (memcmp ("", "", 1) == 0, ""); // okay in C mode only _Static_assert (memchr ("", 0, 1) != 0, ""); // okay in C mode only _Static_assert (strlen ("") == 0, ""); // okay in C and C++ _Static_assert (strcmp ("", "") == 0, ""); // okay in C and C++ _Static_assert ("" == "", ""); // okay in C and C++ _Static_assert (*"" == 0, ""); // error in C only a.c:3:36: warning: expression in static assertion is not an integer constant expression [-Wpedantic] 3 | _Static_assert (memcmp ("", "", 1) == 0, ""); // okay in C mode only | ~~~~~~~~~~~~~~~~~~~^~~~ a.c:4:35: warning: expression in static assertion is not an integer constant expression [-Wpedantic] 4 | _Static_assert (memchr ("", 0, 1) != 0, ""); // okay in C mode only | ~~~~~~~~~~~~~~~~~~^~~~ a.c:5:29: warning: expression in static assertion is not an integer constant expression [-Wpedantic] 5 | _Static_assert (strlen ("") == 0, ""); // okay in C and C++ | ~~~~~~~~~~~~^~~~ a.c:6:33: warning: expression in static assertion is not an integer constant expression [-Wpedantic] 6 | _Static_assert (strcmp ("", "") == 0, ""); // okay in C and C++ | ~~~~~~~~~~~~~~~~^~~~ a.c:7:20: warning: comparison with string literal results in unspecified behavior [-Waddress] 7 | _Static_assert ("" == "", ""); // okay in C and C++ | ^~ a.c:7:20: warning: expression in static assertion is not an integer constant expression [-Wpedantic] 7 | _Static_assert ("" == "", ""); // okay in C and C++ | ~~~^~~~~ a.c:9:21: error: expression in static assertion is not constant 9 | _Static_assert (*"" == 0, ""); // error in C only | ~~~~^~~~