Sorry to cause a compiler philosophy war. I was more interested in processor design. I feel if possible that doing math correctly makes for a more fault tolerant machine.
Everything is fine. You didn’t cause any war!

Look, our fingers are not bleeding on the keyboards yet.
I still believe/know that a N bit value shifted left by a value greater than or equal to N is zero. A shift right by that amount is zero for an unsigned shift and either all 1s or zero for a signed shift based on the sign of the input.
There is nothing to know or believe here, though. That’s because there is no universal knowledge in this topic. It is something we, humans, arbitrarily define. There is no Flying Spaghetti Monster to send us messages, ultimately defining left shifts.
Some, including you above, may decide that in expression `
a << b`,
b above width of
a is within the domain and that the result is 0. Some others may agree that it’s within the domain, but it should reserve a special value to indicate an overflow. Or may keep the uppermost bit. Some others may require some runtime error condition. Others may consider crashing the machine. And some may define that such
b is simply not in the domain. C arbitrarily selects this last option.
For the record, for the original C the question was non-existent from hardware standpoint. PDP-11 had no hardware acceleration for n-bit shifts. It had to be done in software, similar to modern AVR8 family. The underlying hardware instructions were doing signed multiplication by 2 with marking an overflow, on a 16-bit word (ASL) or two 8-bit bytes (ASLB).
This is a vacuous statement. It's outside the domain because it's defined to be outside the domain. I That's like if I defined "ADD" to be an "summation operation on integers other than 7" and then people got upset when my processor evaluates "5 + 7" as five. I would be entirely correct, yet horribly wrong on a much deeper level.
If you increase the domain, there is a single well defined answer for what it would be. One option that is consistent with all of the normal arithmetic rules you expect of shift operations -- for instance that "x >> 33 === (x >> 17) >> 16". One option that is transparently obvious to essentially everyone as "the correct answer."
In this way it's totally unlike your example of 0-1. In that case there is no single value you can choose that meets all the algebraic consistency requirements. There are circumstances where it's useful to add a value to represent that, but nothing that's generally algebraically consistent.
And on what basis do you assume that 5 + 7 is not 5? It’s written in a scripture of your religion? Do numbers 5 and 7, and operator + orbit Earth, and we examined them with telescopes to act one way and not another? No, we did not. We defined them to act this way. We arbitrarily choose this behavior, because it happened to be more useful that other options. Except for the cases, where we decided it’s useful to choose otherwise: 5 + 7 = 5 in modular arithmetic.
Similarly, there is no natural rules of shift arithmetic. Just because one may be accustomed to something doesn’t mean it’s universal. It’s just our brain being wired that way and not another, because of what it was exposed before. In many cases to such an extreme, that it’s impossible for us to see other interpretations or accept them as equally valid.
The 0
-1 mention was about the language having expressions that are outside of its domain, in general, not whether we could find some specific expression that could potentially have some useful interpretation in some circumstances. But that 0
-1 is outside of the domain is, once again, an arbitrary choice, a definition, and there is nothing magical or universally true about it being that way. It has a perfectly well-defined, well-behaving, and consistent value in some algebras. What an great joke it is… one example is C.
