Consider the following code which uses \"template template\" parameters to instantiate a class template using multiple types:
#include
using
Default arguments are ignored for parameters of template arguments. There's this example in n3337, chapter [temp.arg.template], paragraph 2:
template class A { /∗ ... ∗/ };
template class B { /∗ ... ∗/ };
template class C { /∗ ... ∗/ };
template class P> class X { /∗ ... ∗/ };
template class Q> class Y { /∗ ... ∗/ };
X xa; // OK
X xb; // ill-formed: default arguments for the parameters of a template argument are ignored
X xc; // ill-formed: a template parameter pack does not match a template parameter
Y ya; // OK
Y yb; // OK
Y yc; // OK
Note the comment at X xb; above. I can't find the normative text, I'm afraid.
You can correlate this with functions - default arguments are not a part of a signature, either. The same thing would also happen if you tried to call a function that has a parameter defaulted through a function pointer.