Два сценария ios, с учетом того, что 1u
является литералом типа unsigned
:
unsigned
находится в включающем диапазоне от 16 бит до 31 бит. Тип DIM - 1u
- uint32_t
, а все выражение - uint32_t
. Это связано с тем, что тип signed
в двоичном выражении, где другим аргументом является тип unsigned
, неявно преобразуется в unsigned
.
unsigned
- 32 бита или больше . Тогда тип DIM - 1u
равен unsigned
, и то же самое для типа всего выражения.
Наконец, обратите внимание, что стандарт C ++ разрешает unsigned
и std::uint32_t
быть однотипным; т.е.
std::cout << std::is_same<std::uint32_t, unsigned>::value;
допускается равным 1.