>>105979204
overflows and underflows usually happen in places where you don't expect them. Like your coworker running a 'i-1' on an array, while forgetting to handle the case where i = 0, leading to segfaults.

>>105979220
the code I posted is what the official c++ guidelines recommend. Your code should not take a reference for arithmetic values as those are often small (half a word for int, single word for long on x64).
You should do something like this instead:
template <typename T>
requires std::is_arithmetic_v<T>
[[nodiscard]] static constexpr auto add(T&& a, T&& b) noexcept -> T
{
// Arithmetic types are trivially copyable on most architectures, but forward just in cast
return std::forward<T>(a) + std::forward<T>(b);
}