为什么这段代码会出错,"模板专业化要求'模板<>'"?

Meh*_*dad 7 c++ templates clang crtp template-specialization

当我尝试用Clang编译它时

template<class T>
struct Field
{
    char const *name;
    Field(char const *name) : name(name) { }
};

template<class Derived>
class CRTP { static Field<Derived> const _field; };

class Class : public CRTP<Class> { };
Field<Class>   const CRTP<Class>::_field("blah");

int main() { }
Run Code Online (Sandbox Code Playgroud)

我明白了

error: template specialization requires 'template<>'
Field<Class>   const CRTP<Class>::_field("blah");
                     ~~~~~~~~~~~  ^
Run Code Online (Sandbox Code Playgroud)

我根本不明白这个错误.我的定义有什么问题,_field如何解决?

(注意,_field所有子类的参数不一定相同.)

dyp*_*dyp 12

为了让编译器将其识别为模板特化(例如,为了能够检查语法),您需要template关键字:

template<>
Field<Class> const CRTP<Class>::_field("blah");
Run Code Online (Sandbox Code Playgroud)

它的括号是空的,因为所有模板参数都是专用的,但你不能把它留下.