fork download
  1. //#include <iostream>
  2.  
  3. template <class T1>
  4. class A {};
  5.  
  6. class B : public A<int> {};
  7.  
  8. template <template <class T1> class T, class T1 >
  9. void func1(T<T1> _arg) {}
  10.  
  11. template <class T1, class T2>
  12. class C {};
  13.  
  14. template <class T1>
  15. class D : public C<T1,int> {};
  16.  
  17. template <template <class T1, class T2> class T, class T1, class T2>
  18. void func2(T<T1,T2> _arg) {}
  19.  
  20.  
  21. int main() {
  22. A<int> a;
  23. B b;
  24. func1(a);//works
  25. func1(b);//doesn't work
  26.  
  27. #if 0
  28. C<float,int> c;
  29. D<float> d;
  30. func2(c);//works
  31. 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"
  32. #endif
  33. return 0;
  34. }
  35.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
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
Standard output is empty