забавно, но все же смахивает на баг компилятора.
Одно дело когда UB это
(-1) << 10;
или
a += a++;
а другое дело то что в посте написано. Если компилятор видет выход за границы, то он не должен ничего скомпилировать (челвоек ожидает что именно этот вариант UB будет выбран)