#pragma once

#include <stdint.h>

namespace tools
{
  template<uint64_t a, uint64_t b>
  struct PowerOf
  {
    enum Data : uint64_t
    {
      // a^b = a * a^(b-1)
      Value = a * PowerOf<a, b - 1>::Value,
    };
  };

  template<uint64_t a>
  struct PowerOf<a, 0>
  {
    enum Data : uint64_t
    {
      // a^0 = 1
      Value = 1,
    };
  };
}