Подтвердить что ты не робот

Неявное преобразование: действует ли следующее предупреждение?

Этот вопрос Неявные правила преобразования типов в операторы на С++ (и несколько других) state

Если длинный long unsigned int другой, то длинный длинный unsigned int

Однако, если я делаю следующее в MSVC:

unsigned int a = <some expression>;
unsigned long long b = a << 32ULL;

Вторая строка генерирует следующее предупреждение:

warning C4293: '<<': shift count negative or too big, undefined behavior

32ULL - это 64-разрядное значение без знака, поэтому в соответствии с правилами неявного преобразования это означает, что a также преобразуется в unsigned long long. Следовательно, я перехожу на 64-битное значение на 32 бита, явно четко определенную операцию.

Является ли MSVC прослушиваемым или есть недостаток в моей логике?

4b9b3361