,模板元,非类型模板参数编译异常

求助,模板元,非类型模板参数编译错误
一段用来静态计算乘方的模板元代码。
用double作为第一类型参数的时候无法通过编译。
那位大神解释一下。。,模板元,非类型模板参数编译异常

template<class T,T _Numer,unsigned int powst>
class static_power
{
public:
static T const value = static_power<T,_Numer,powst-1>::value*_Numer;
};


template<class T,T _Numer>
class static_power<T,_Numer,0>
{
public:
static T const value =T(1);
};

int main()
{
std::cout<<static_power<double,2.0,31>::value<<endl;
return 0;
}

------解决方案--------------------
非类型模板参数:

在编译期或链接期可以确定的常值。这种参数的类型必须是下面的一种:

a> 整型或枚举

b> 指针类型( 普通对象的指针,函数指针,成员指针 )

c> 引用类型( 指向对象或者指向函数的引用 )

其他的类型目前都不允许作为非类型模板参数使用

eg:内部链接对象不允许作为非类型模板参数