PS: One yet non-considered question that was part of my original post was: "Is there any rationale from the _software designer_'s perspective?"
I didn't respond to your original question because it was based on a misconception. Whether a given expression is a constant expression, in the sense of needing to satisfy the constraints of 6.6, depends not on the form of the expression but on the context in which it appears. The 6.6 constraints apply only in situations where the C standard expressly requires a constant expression. Other cases, such as a use like this
int whatever(){ int r = (int)(-1u/2) + 1; return r; }
do not need to satisfy the 6.6 constraints, because the C standard doesn't require a constant expression in that context. (Note that the initializing expression for 'r' does overflow the range of int in implementations where UINT_MAX == INT_MAX*2.)