//>>67を一般の引数用に改良、多分展開されるはず。

template<typename T, int N>
class Pow
{
public:
 T operator() (T x)
  {
  T pw = Pow<(N>>1)>(x);
  return (((N%2==1)?x:1)*pw*pw);
  }
};

template<typename T>
class Pow<T,0>
{
public:
 T operator() (T)
  {return (1);}
};

//...
 double pow5_5 = Pow<double,5>(5);
//...