#include<iostream>

template<unsigned int X, unsigned int N>
struct Power
{
 static const unsigned int value = X * Power<X,N-1>::value;
};

template<unsigned int X>
struct Power<X,0>
{
  static const unsigned int value = 1;
};

int main ()
{
  std::cout << "Power<5,4> = " << Power<5,4>::value << "\n";
}
