Ответ 1
Да, это возможно, и ваш пример скорее всего будет undefined на большинстве настольных архитектур.
Для этого примера предположим, что int
является 32-битным дополняющим типом, а unsigned short
- 16-разрядным.
Я использую N4140 для цитат.
До умножения оба значения повышаются до int
:
§ 4.5 [conv.prom]/1
Значение целочисленного типа, отличного от bool, char16_t, char32_t или wchar_t, чей целочисленный ранг преобразования (4.13) меньше ранга int может быть преобразован в prvalue типа int, если int может представлять все значения типа источника;
Тогда:
§ 5 [expr]/4
Если во время оценки выражения результат не математически определены или нет в диапазоне представимых значений для его тип, поведение undefined.
Так как результат 65535 * 65535 (4294836225) не определен в нашем 32-битном int
(со значением диапазона [-2147483648,2147483647]), поведение undefined.