January 2018
Intermediate to advanced
374 pages
9h 53m
English
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 ...