https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80730
--- Comment #6 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- On Mon, 15 May 2017, msebor at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80730 > > --- Comment #5 from Martin Sebor <msebor at gcc dot gnu.org> --- > I"m not sure I understand what you're saying. Your comment that "the > initializer *as > converted* must be a constant expression (and, thus, to be an address > constant, must be of pointer type)" makes it sound as an argument for > rejecting > '_Bool b = "";' which would mean that you think '_Bool b = a;' should be > rejected as well. But your other comment that you'd "consider it appropriate > to handle implicit conversions in initializers exactly the same as casts are > handled" sounds as though you think '_Bool b = "";' should be accepted > (because > '_Bool b = (_Bool)"";' is accepted). So I'm not sure what to make of it. I think both '_Bool b = "";' and '_Bool b = (_Bool)"";' should be handled the same, regarding what's accepted with what options and what diagnostics. I don't think the standard should be interpreted in a way that handles them differently or that requires either of them to be accepted. Actually accepting them is fairly harmless. (Those particular cases don't involve anything *forbidden* in a constant expression, such as a function call, so don't actually require a pedwarn-if-pedantic, although I think such a diagnostic with -pedantic makes sense.) > The most useful behavior is to accept all three with a pedantic warning. It > makes it easy to port code to GCC that was written to one of these compilers, > while also making it possible to find out about portability problems when > porting to other compilers. Do you agree with this as a goal to work toward? Yes.