# W3cubDocs

/C++

Defined in header `<ratio>`
```template< class R1, class R2 >
using ratio_add = /* see below */;```

The alias template `std::ratio_add` denotes the result of adding two exact rational fractions represented by the `std::ratio` specializations `R1` and `R2`.

The result is a `std::ratio` specialization `std::ratio<U, V>`, such that given `Num == R1::num * R2::den + R2::num * R1::den` and `Denom == R1::den * R2::den` (computed without arithmetic overflow), `U` is `std::ratio<Num, Denom>::num` and `V` is `std::ratio<Num, Denom>::den`.

### Notes

If `U` or `V` is not representable in `std::intmax_t`, the program is ill-formed. If `Num` or `Denom` is not representable in `std::intmax_t`, the program is ill-formed unless the implementation yields correct values for `U` and `V`.

The above definition requires that the result of `std::ratio_add<R1, R2>` be already reduced to lowest terms; for example, `std::ratio_add<std::ratio<1, 3>, std::ratio<1, 6>>` is the same type as `std::ratio<1, 2>`.

### Example

```#include <iostream>
#include <ratio>

int main()
{
typedef std::ratio<2, 3> two_third;
typedef std::ratio<1, 6> one_sixth;

typedef std::ratio_add<two_third, one_sixth> sum;
std::cout << "2/3 + 1/6 = " << sum::num << '/' << sum::den << '\n';
}```

Output:

`2/3 + 1/6 = 5/6`