This example is similar to the previous example, but this time we will see how to distinguish between operators and global functions. In C++, the % operator is used to get the modulus of integers while std::fmod() is used for floating point types. We'd like to generalize our code base and create a generic modulus function called generic_mod().
If we would implement generic_mod() with a regular if statement...
template <typename T> auto generic_mod(const T& v, const T& n) -> T { assert(n != 0); if (std::is_floating_point_v<T>) { return std::fmod(v, n); } else { return v % n; } }
... it would fail if invoked with T == float as the compiler will generate the following function, which will ...