Если в значительной степени сохранить предположения, скажите мне, если я пропустил какой-либо случай (это не будет работать в компиляторах, придерживающихся C ++ 98 или более новых стандартов):
int overflowSum(DWORD a, DWORD b) {
return (b > 0) ? (a + b < a) : (a + b > a);
}
Если вы считаете свой DWORD неподписанным, вы можете упростить его:
int overflowSum(DWORD a, DWROD b) {
return a + b < a;
}