Skip to content

Latest commit

 

History

History
52 lines (35 loc) · 1.35 KB

349.md

File metadata and controls

52 lines (35 loc) · 1.35 KB
Info

Example

#include <ratio>

static_assert(std::ronna::num == std::quetta::num);
static_assert(std::ronna::den == std::quetta::den);

https://godbolt.org/z/E16fqd9Ma

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

https://godbolt.org/z/Ko1jhEhWj

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{});

https://godbolt.org/z/qEYnGnvhY