仅使用标准类型参数实例化具有模板化类类型的变量时,语法如下所示:

template<typename Arg = int>
class Templ;

Templ<>& myTempl;

省略空的参数列表<>应该会产生编译错误,因为需要模板参数列表。

但是显然(至少在VS2013下),以下声明不需要模板参数列表:
template<typename Arg> //" = int" left out
class Templ{
    Templ& myTempl; //no <> here
};

但是为什么这样做呢?根据IntelliSense的说法,编译器选择了正确的类型(Templ<int>),因此它可以按预期运行,但是成员声明是否仍需要一个空的参数列表?

编辑:不,它不能按预期工作。我没有足够彻底地检查它。将鼠标悬停在Templ<short>::myTempl行上时,IntelliSense会显示其类型为short

最佳答案

类名被注入(inject)到类作用域中

9个类(class)[class]



以及类似的类模板

14.6.1本地声明的名称[temp.local]



这样您就可以在意思Templ的情况下使用Templ<Arg>

10-05 20:01