int g(); int main() { // enum { x = (g(), 0) }; enum { x = (int)(int(*)[g()])0 }; return 0; } Constant expression evaluator seems to (wrongly IMHO) believe that types cannot have side effects. Do you confirm we have a bug here?