http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51294
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-11-24 18:37:31 UTC --- (In reply to comment #4) > Shouldn't integral conversion rules apply if the types of the second and third > arguments to a conditional expression differ. Yes. > So zero should be converted from the default int to a char No, the char is converted to int. Hence the warning. > as presumably the > older version of gcc did. Nope. > Perhaps a language lawyer could explain why this is or isn't a bug. I did ;) > Though obviously warnings are not covered by the standard. > > > Note: > > (haveBar?bar_:(char)0) > > is not an acceptable workaround for C++ if -Wold-style-cast is used (which is > in my experience typical). It would have to be > > (haveBar?bar_:static_cast<char>(0)) > > which is a notch higher in annoyingness. OK then: (haveBar?bar_:char())