#include <iostream>
using namespace std;
template<class T>
class A{T t;};
template<class T>
void f1(){
std::cout << "i take one template argument" << std::endl;
}
template<template<class T>class Y>
void f2(){
std::cout << "i take one template argument which is template" << std::endl;
}
int main() {
// your code goes here
f1<int>(); //ok
f1<A<int>>(); //ok
f2<A>(); //ok
f2<A<int>>();//error
f1<A>(); //error
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgQXtUIHQ7fTsKCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgZjEoKXsKCXN0ZDo6Y291dCA8PCAiaSB0YWtlIG9uZSB0ZW1wbGF0ZSBhcmd1bWVudCIgPDwgc3RkOjplbmRsOwp9CnRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzIFQ+Y2xhc3MgWT4Kdm9pZCBmMigpewoJc3RkOjpjb3V0IDw8ICJpIHRha2Ugb25lIHRlbXBsYXRlIGFyZ3VtZW50IHdoaWNoIGlzIHRlbXBsYXRlIiA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJZjE8aW50PigpOwkgICAvL29rCglmMTxBPGludD4+KCk7ICAvL29rCglmMjxBPigpOwkgICAvL29rCglmMjxBPGludD4+KCk7Ly9lcnJvcgoJZjE8QT4oKTsJICAgLy9lcnJvcgoJcmV0dXJuIDA7Cn0=
prog.cpp: In function ‘int main()’:
prog.cpp:22:13: error: no matching function for call to ‘f2()’
f2<A<int>>();//error
^
prog.cpp:13:6: note: candidate: template<template<class T> class Y> void f2()
void f2(){
^~
prog.cpp:13:6: note: template argument deduction/substitution failed:
prog.cpp:23:8: error: no matching function for call to ‘f1()’
f1<A>(); //error
^
prog.cpp:9:6: note: candidate: template<class T> void f1()
void f1(){
^~
prog.cpp:9:6: note: template argument deduction/substitution failed: