コンパイル時に、引数の型に応じて整数または浮動小数点のモジュロを計算する次の関数を検討してください。
template<typename T>
constexpr T modulo(const T x, const T y)
{
return (std::is_floating_point<T>::value) ? (x < T() ? T(-1) : T(1))*((x < T() ? -x : x)-static_cast<long long int>((x/y < T() ? -x/y : x/y))*(y < T() ? -y : y))
: (static_cast<typename std::conditional<std::is_floating_point<T>::value, int, T>::type>(x)
%static_cast<typename std::conditional<std::is_floating_point<T>::value, int, T>::type>(y));
}
この関数の本体を改善できますか? (整数型と浮動小数点型の両方に対して単一の関数が必要です)。