Example of generic modulus function using if constexpr

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 ...

Get C++ High Performance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.