#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=