#include <iostream>
using namespace std;
template<class T1, class T2>
class AClass { public: void test(){cout<<"AT1T2"<<endl;}};
template<class T>
class AClass<T, T> { public: void test(){cout<<"ATT"<<endl;}}; // specialized class.
AClass<int,float> aClassIntFloat; // works just fine
AClass<int, int> aClassIntInt; // works just fine
template<class T2>
class AClass<double, T2> { public: void test(){cout<<"ADT2"<<endl;}};
AClass<double, int> aClassDoubleInt;
//AClass<int> specializedIntClass; //"error: wrong number of template arguments (1, should be 2)"
int main() {
aClassIntFloat.test();
aClassIntInt.test();
aClassDoubleInt.test();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyPgpjbGFzcyBBQ2xhc3MgIHsgcHVibGljOiB2b2lkIHRlc3QoKXtjb3V0PDwiQVQxVDIiPDxlbmRsO319OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgQUNsYXNzPFQsIFQ+IHsgcHVibGljOiB2b2lkIHRlc3QoKXtjb3V0PDwiQVRUIjw8ZW5kbDt9fTsgLy8gc3BlY2lhbGl6ZWQgY2xhc3MuCgpBQ2xhc3M8aW50LGZsb2F0PiBhQ2xhc3NJbnRGbG9hdDsgLy8gd29ya3MganVzdCBmaW5lCgpBQ2xhc3M8aW50LCBpbnQ+IGFDbGFzc0ludEludDsgLy8gd29ya3MganVzdCBmaW5lCgp0ZW1wbGF0ZTxjbGFzcyBUMj4KY2xhc3MgQUNsYXNzPGRvdWJsZSwgVDI+ICB7IHB1YmxpYzogdm9pZCB0ZXN0KCl7Y291dDw8IkFEVDIiPDxlbmRsO319OwoKQUNsYXNzPGRvdWJsZSwgaW50PiBhQ2xhc3NEb3VibGVJbnQ7IAoKLy9BQ2xhc3M8aW50PiBzcGVjaWFsaXplZEludENsYXNzOyAvLyJlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHRlbXBsYXRlIGFyZ3VtZW50cyAoMSwgc2hvdWxkIGJlIDIpIgoKCmludCBtYWluKCkgewoJYUNsYXNzSW50RmxvYXQudGVzdCgpOyAKCWFDbGFzc0ludEludC50ZXN0KCk7CglhQ2xhc3NEb3VibGVJbnQudGVzdCgpOyAKCXJldHVybiAwOwp9