template<int exp, typename T>
inline T UnrolledPower(const T& base)
{
if( 0 == exp )
return 1;
else if( exp % 2 )
return UnrolledPower<(exp > 0) ? (exp - 1) : 0>(
base
) * base;
else
return UnrolledPower<exp/2>(base * base);
}