In the following descriptions, an arithmetic operation
is performed as a mathematical operation with infinite range and then
it is determined whether the mathematical result fits into the result type.

```
template<class T>
constexpr T add_sat(T x, T y) noexcept;
```

```
template<class T>
constexpr T sub_sat(T x, T y) noexcept;
```

```
template<class T>
constexpr T mul_sat(T x, T y) noexcept;
```

```
template<class T>
constexpr T div_sat(T x, T y) noexcept;
```

```
template<class R, class T>
constexpr R saturate_cast(T x) noexcept;
```