История изменений
Исправление bga_, (текущая версия) :
Я вообще такой код пишу не надеясь на всякие implicit conversion, integer promotion. Считаю что выражение имеет тип первого операнда (если он больше int). Если меньше то придется еще и кастануть.
uint64_t(x) + y; // будет uint64_t
uint16_t(x) + y; // будет int
uint16_t(x + y); // так точно будет uint16_t
Итого всегда явно кастуй.
Исходная версия bga_, :
Я вообще такой код пишу не надеясь на всякие implicit conversion, integer promotion. Считаю что выражение имеет тип первого операнда (если он больше int). Если меньше то придется еще и кастануть.
uint64_t(x) + y; // будет uint64_t
uint16_t(x) + y; // будет int
uint16_t(x + y); // так точно будет uint16_t