https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97913
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- -fno-delete-null-pointer-check means that objects can live at address zero so (((const int*)(& arr)) == 0u) is indeed not a constant expression. I suppose with -fno-delete-null-pointer-check C++ lacks a way to query for "no object" (since &arr is certainly the address of an object - it just may reside at address zero!).