//#include <iostream>
template < class T1>
class A { } ;
class B : public A< int > { } ;
template < template < class T1> class T, class T1 >
void func1( T< T1> _arg) { }
template < class T1, class T2>
class C { } ;
template < class T1>
class D : public C< T1,int > { } ;
template < template < class T1, class T2> class T, class T1, class T2>
void func2( T< T1,T2> _arg) { }
int main( ) {
A< int > a;
B b;
func1( a) ; //works
func1( b) ; //doesn't work
#if 0
C< float ,int > c;
D< float > d;
func2( c) ; //works
func2( d) ; //doesn't work,compilation error message: "Candidate template ignored: substitution failure : template template argument has different template parameters than its corresponding template template parameter"
#endif
return 0 ;
}
Ly8jaW5jbHVkZSA8aW9zdHJlYW0+Cgp0ZW1wbGF0ZSA8Y2xhc3MgVDE+CmNsYXNzIEEge307CgpjbGFzcyBCIDogcHVibGljIEE8aW50PiB7fTsKCnRlbXBsYXRlIDx0ZW1wbGF0ZSA8Y2xhc3MgVDE+IGNsYXNzIFQsIGNsYXNzIFQxID4Kdm9pZCBmdW5jMShUPFQxPiBfYXJnKSB7fQoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KY2xhc3MgQyB7fTsKCnRlbXBsYXRlIDxjbGFzcyBUMT4KY2xhc3MgRCA6IHB1YmxpYyBDPFQxLGludD4ge307Cgp0ZW1wbGF0ZSA8dGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4gY2xhc3MgVCwgY2xhc3MgVDEsIGNsYXNzIFQyPgp2b2lkIGZ1bmMyKFQ8VDEsVDI+IF9hcmcpIHt9CgoKaW50IG1haW4oKSB7CiAgICBBPGludD4gYTsKICAgIEIgYjsKICAgIGZ1bmMxKGEpOy8vd29ya3MKICAgIGZ1bmMxKGIpOy8vZG9lc24ndCB3b3JrCgojaWYgMAogICAgQzxmbG9hdCxpbnQ+IGM7CiAgICBEPGZsb2F0PiBkOwogICAgZnVuYzIoYyk7Ly93b3JrcwogICAgZnVuYzIoZCk7Ly9kb2Vzbid0IHdvcmssY29tcGlsYXRpb24gZXJyb3IgbWVzc2FnZTogIkNhbmRpZGF0ZSB0ZW1wbGF0ZSBpZ25vcmVkOiBzdWJzdGl0dXRpb24gZmFpbHVyZSA6IHRlbXBsYXRlIHRlbXBsYXRlIGFyZ3VtZW50IGhhcyBkaWZmZXJlbnQgdGVtcGxhdGUgcGFyYW1ldGVycyB0aGFuIGl0cyBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIHRlbXBsYXRlIHBhcmFtZXRlciIKI2VuZGlmCiAgICByZXR1cm4gMDsKfQo=
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:25:12: error: no matching function for call to ‘func1(B&)’
func1(b);//doesn't work
^
prog.cpp:25:12: note: candidate is:
prog.cpp:9:6: note: template<template<class T1> class T, class T1> void func1(T<T1>)
void func1(T<T1> _arg) {}
^
prog.cpp:9:6: note: template argument deduction/substitution failed:
prog.cpp:25:12: note: can't deduce a template for ‘T<T1>’ from non-template type ‘B’
func1(b);//doesn't work
^
stdout