http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60838
Marek Polacek <mpolacek at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mpolacek at gcc dot gnu.org --- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> --- I actually don't think this is a bug. While C99/C11 say what you wrote about Constant expressions, C89 says something else: "Constant expressions shall not contain assignment, increment, decrement, function-call, or comma operators, except when they are contained within the operand of a sizeof operator." And really: int u = sizeof ((0 ? (3, 0) : 0) + 1); issues no warnings even with -std=c89. The default is still -std=gnu89, so you may want to use e.g. -std=gnu99.