[英]Why the template with default template arguments can't be used as template with less template argument in Template Template Parameters
myTemplateTemplate 期望第二个模板参数是一个带有一个参数的模板。 myDefaultTemplate 是一个带有两个 arguments 的模板,第二个参数的默认类型是 int。
在 VS2008 中,我收到编译错误:class 模板“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;
}
从标准(见 14.3.3 第 1 段 - [temp.arg.template):
模板模板参数的模板参数应是 class 模板的名称,表示为 id-expression。 将模板模板参数与相应参数匹配时,仅考虑主 class 模板; 即使参数列表与模板模板参数的参数列表匹配,也不考虑部分特化。
这意味着模板myDefaultTemplate
将仅被视为 2 arguments 模板。 将不考虑默认参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.