an expression like 'i*0', even though it's value is constant and can be evaluated at compile time is not an integer constant expression, and hence no null pointer constant, and therefore the conditional operator doesn't select the other type.