此代码
template<class>
struct template_arg;
template<class T, template<T> class Template, T Value>
struct template_arg<Template<Value> >
{
static T value() { return Value; }
};
template<int>
struct const_int { };
int main()
{
return template_arg<const_int<0> >::value();
}
导致以下错误:
error: template parameters not deducible in partial specialization:
struct template_arg<Template<Value> >
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
但是,我不明白为什么编译器无法推断出这个模板参数。
这背后的原因是什么?有一个很好/通用的解决方法吗?