Но, по сути, выброс исключения в этом случае это UB
Давай уточнимся: UB - это Undefined или Unspeficied? 😉 В любом случая, с точки зрения стандарта это может быть UB, но не с точки зрения платформы или реализации. Т.е. у нас на выброс исключения было вполне себе определённое поведение: вызов termination handler. В Debug, мигал SOS диодом и крутился в цикле, гасив планировщик, в Release - перегражал устройство. Если использовалось место, которое выбрасывало исключения без заглушки, мы просто валились на линковке и дописывали заглушку.