Żeby było jasne Undefined Behavior w C++ oznacza, że standard nie nakłada żadnych więzów na implementację jaką ma wykonać kompilator.
Celem Undefined Behavior w standardzie C i C++, jest danie takiej wolności implementacji kompilatora, by kod działał szybko na każdej możliwej maszynie.
Jeśli jest jakaś dziwna platforma, to kompilator nie powinien być zmuszony do emulowania zachowania popularnych platform.
Przepełnienie dla unsigned int
jest niezdefiniowane w standardzie, bo po prostu nie wszystkie platformy używają U2 (takich maszyn które nie stosują U2 jest niewiele, większość starsza niż 30 lat, ale istnieją i standard musi je uwzględniać).
Mało tego istnieją maszyny, które stosują w obliczaniach całkowitych system dziesiętny (cyfry dziesiętne zapisane są binarnie, ale obliczania są robione w systemie dziesiętnym).
Tak samo standard nie definiuje co się powinno stać jeśli wskaźnik pokazuje na zły obiekt.
Generalnie chodzi mi o to, że Undefined Behavior wcale nie musi oznaczać błędu albo crash-a.