Example
#include <ratio>
static_assert(std::ronna::num == std::quetta::num);
static_assert(std::ronna::den == std::quetta::den);
Puzzle
- Can you verify that multiplying femto and exta will produce kilo using ratio helpers?
static_assert(std::femto * std::exa == std::kilo); // TODO apply ratio helpers
Solutions
template <std::intmax_t Num1, std::intmax_t Den1, std::intmax_t Num2,
std::intmax_t Den2>
consteval auto operator*(const std::ratio<Num1, Den1> r,
const std::ratio<Num2, Den2> r2) {
return std::ratio_multiply<decltype(r), decltype(r2)>{};
}
template <std::intmax_t Num1, std::intmax_t Den1, std::intmax_t Num2,
std::intmax_t Den2>
consteval bool operator==(const std::ratio<Num1, Den1> r,
const std::ratio<Num2, Den2> r2) {
return std::ratio_equal_v<decltype(r), decltype(r2)>;
}
static_assert(std::femto{} * std::exa{} == std::kilo{});