#include <iostream>
#include <string>
struct EmptyType { };
template<class arg1=EmptyType, class arg2=EmptyType, class arg3=EmptyType>
class my_class
{ public:
my_class(){
std::cout << 3 << std::endl;
}
// FILL_MY_CLASS_DEFINE(3)
};
template<class arg1, class arg2>
class my_class<arg1,arg2,EmptyType>
{ public:
my_class(){
std::cout << 2 << std::endl;
}
// FILL_MY_CLASS_DEFINE(2)
};
template<class arg1>
class my_class<arg1,EmptyType,EmptyType>
{ public:
my_class(){
std::cout << 1 << std::endl;
}
// FILL_MY_CLASS_DEFINE(1)
};
int main(int argc, const char *argv[])
{
// my_class<std::string, double, int> a;
my_class<std::string, int> b;
my_class<void> c;
my_class<> d;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgogCnN0cnVjdCBFbXB0eVR5cGUgeyAgfTsKIAp0ZW1wbGF0ZTxjbGFzcyAgYXJnMT1FbXB0eVR5cGUsIGNsYXNzIGFyZzI9RW1wdHlUeXBlLCBjbGFzcyBhcmczPUVtcHR5VHlwZT4KY2xhc3MgbXlfY2xhc3MKeyBwdWJsaWM6CglteV9jbGFzcygpewoJCXN0ZDo6Y291dCA8PCAzIDw8IHN0ZDo6ZW5kbDsKCX0KICAgIC8vIEZJTExfTVlfQ0xBU1NfREVGSU5FKDMpCn07CnRlbXBsYXRlPGNsYXNzICBhcmcxLCBjbGFzcyBhcmcyPgpjbGFzcyBteV9jbGFzczxhcmcxLGFyZzIsRW1wdHlUeXBlPgp7IHB1YmxpYzoKCW15X2NsYXNzKCl7CgkJc3RkOjpjb3V0IDw8IDIgPDwgc3RkOjplbmRsOwoJfQogICAgLy8gRklMTF9NWV9DTEFTU19ERUZJTkUoMikKfTsKdGVtcGxhdGU8Y2xhc3MgIGFyZzE+CmNsYXNzIG15X2NsYXNzPGFyZzEsRW1wdHlUeXBlLEVtcHR5VHlwZT4KeyAgcHVibGljOgoJbXlfY2xhc3MoKXsKCQlzdGQ6OmNvdXQgPDwgMSA8PCBzdGQ6OmVuZGw7Cgl9CiAgICAvLyBGSUxMX01ZX0NMQVNTX0RFRklORSgxKQp9OwogCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCnsKIC8vICAgbXlfY2xhc3M8c3RkOjpzdHJpbmcsIGRvdWJsZSwgaW50PiBhOwogICAgbXlfY2xhc3M8c3RkOjpzdHJpbmcsIGludD4gYjsKICAgIG15X2NsYXNzPHZvaWQ+IGM7CiAgICBteV9jbGFzczw+IGQ7CiAKICAgIHJldHVybiAwOwp9