https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80730
--- Comment #1 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- I think it should be understood implicitly that it's the initializer *as converted* that must be a constant expression (and, thus, to be an address constant, must be of pointer type). Thus "unsigned int x = -2.0;" at file scope is invalid (while -2.0 is a constant expression, the conversion to unsigned int would involve runtime undefined behavior, so makes it not a constant expression). And that where part of a constant expression is an address constant, that can only be related to an overall address constant as an initializer in the obvious way (effectively, through operations that add constants to it, and conditional expressions with integer constant expression conditions). Thus address constants converted to _Bool are not valid initializers, and nor is ("" ? "" : "") an address constant, because of the truth-value test of the first "" making an invalid condition. That is, this is an issue about the unclear standard wording regarding constant expressions where I think the compiler is behaving appropriately. A question about appropriate conditions and array indices in address constants (whether they must be integer or just arithmetic constant expressions) is point 7 in my old list of constant expressions issues <https://www.polyomino.org.uk/computer/c/const-exprs-issues.txt>. _Bool initializers with address constants and such constants controlling ?: are on my notes of further constant expression issues (the former probably based on <https://groups.google.com/forum/#!original/comp.std.c/ez822gwxxYA/k1OpYXFy90wJ> and <https://groups.google.com/forum/#!original/comp.std.c/mIh1ej_mkrc/vbbp9UQ7zDoJ>, the latter with the date 2007-10-24 but I'm not sure where the discussion was).