36 return( b == T(0) ? a :
gcd_recur(b, a % b) );
39template<typename T, typename std::enable_if<std::is_integral<T>::value>::type* =
nullptr>
48template<typename T, typename std::enable_if<!std::is_integral<T>::value>::type* =
nullptr>
57template<
typename T1,
typename T2,
typename TC = common_t<T1,T2>>
76template<
typename T1,
typename T2>
79gcd(
const T1 a,
const T2 b)
constexpr T gcd_recur(const T a, const T b) noexcept
Definition gcd.hpp:33
constexpr T gcd_int_check(const T a, const T b) noexcept
Definition gcd.hpp:42
constexpr TC gcd_type_check(const T1 a, const T2 b) noexcept
Definition gcd.hpp:60
constexpr T abs(const T x) noexcept
Compile-time absolute value function.
Definition abs.hpp:40
constexpr common_t< T1, T2 > gcd(const T1 a, const T2 b) noexcept
Compile-time greatest common divisor (GCD) function.
Definition gcd.hpp:79
typename std::common_type< T... >::type common_t
Definition gcem_options.hpp:80
unsigned long long int ullint_t
Definition gcem_options.hpp:69