Rol*_*dXu 10 c++ templates stl
myTemplateTemplate期望第二个模板参数是带有一个参数的模板.myDefaultTemplate是一个带有两个参数的模板,第二个参数的默认类型为int.
在VS2008中,我得到编译错误:类模板'myDefaultTemplate'的模板参数列表与模板参数'TT'的模板参数列表不匹配
那么,为什么myDefaultTemplate不能仅用作一个参数的模板呢?如果C++编译器支持它会有任何负面影响吗?
template
<typename T1, typename T2 = int>
class
myDefaultTemplate{
T1 a;
T2 b;
};
template
<typename T1, template<typename T2> class TT>
class
myTemplateTemplate{
T1 a;
TT<T1> b;
};
int main(int argc, char* argv[]){
myTemplateTemplate<int, myDefaultTemplate> bar; //error here:
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从标准(见14.3.3第1段 - [temp.arg.template]):
模板template-parameter的template-argument应该是类模板的名称,表示为id-expression.在将模板模板参数与相应参数匹配时,仅考虑主类模板; 即使参数列表与模板模板参数的参数列表匹配,也不会考虑部分特化.
这意味着模板myDefaultTemplate将仅被视为2个参数模板.不会考虑默认参数.