IIUC, GP's foo() would likely be optimized to { return true; }, and so would similar timestamp overflow checks.
Given this thread of subargument, making the difference between 32-bit unsigned numbers is MORE DEFINED than using signed integers.
-------
IE: If your code was correct with "int timestamp", it will be more correct with "unsigned int timestamp".
In any case, "int" or "unsigned int" based timestamp manipulation wouldn't be like the code you suggested, but instead "int difference = x - y".
In the signed integer case, "difference" is (conceptually) negative, while in the unsigned integer case, "difference" is guaranteed to have overflow. Both cases are conceptually correct with regards to the difference of timestamps.
To get meaningful results may require some care, but the languages provide everything needed to exercise such care.
> Except signed overflow invoking Undefined Behaviour in any C compiler, whereas unsigned overflow does not.
We aren't talking about unsigned integer types. We're talking about the behaviour of signed integer types.