namespace std {
template<intmax_t N, intmax_t D = 1> class ratio {
public:
static constexpr intmax_t num;
static constexpr intmax_t den;
using type = ratio<num, den>;
};
}
If the template argument D is zero or the absolute values of either of the
template arguments N and D is not representable by type
intmax_t, the program is ill-formed.
These rules ensure that infinite
ratios are avoided and that for any negative input, there exists a representable value
of its absolute value which is positive.
In a two's complement representation, this
excludes the most negative value.
The static data members num and den shall have the following values,
where gcd represents the greatest common divisor of the absolute values of
N and D: