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;