Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why the template with default template arguments can't be used as template with less template argument in Template Template Parameters

Tags:

c++

templates

stl

myTemplateTemplate expects the second template parameter is a template with one argument. myDefaultTemplate is a template with two arguments, and the second argument has default type int.

In VS2008, I get the compile error:the template parameter list for class template 'myDefaultTemplate' does not match the template parameter list for template parameter 'TT'

So,why the myDefaultTemplate can't be used as the template with just one argument? Are there any negative impact if C++ compiler supports it?

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;
}
like image 734
RolandXu Avatar asked Jul 08 '11 15:07

RolandXu


1 Answers

From the standard (see 14.3.3 paragraph 1 - [temp.arg.template):

A template-argument for a template template-parameter shall be the name of a class template, expressed as id-expression. Only primary class templates are considered when matching the template template argument with the corresponding parameter; partial specializations are not considered even if their parameter lists match that of the template template parameter.

That means the template myDefaultTemplate will be seen only as 2 arguments template. The default argument will not be considered.

like image 162
BЈовић Avatar answered Sep 23 '22 12:09

BЈовић