#include <type_traits>
template<typename T>
class RefCountedRecycle
{
public:
template<typename U>
static typename std::enable_if<std::is_convertible<U,T>::value, void>::type
Destruct(U *item);
template<typename U>
static typename std::enable_if<!std::is_convertible<U,T>::value, void>::type
Destruct(U *item) = delete;
};
template<typename T, typename U>
typename std::enable_if<std::is_convertible<U,T>::value, void>::type
RefCountedRecycle<T>::Destruct(U *item)
{
auto p = static_cast<T*>(item);
p->Recycle();
}
int main()
{
return 0;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgUmVmQ291bnRlZFJlY3ljbGUKewpwdWJsaWM6CiAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb252ZXJ0aWJsZTxVLFQ+Ojp2YWx1ZSwgdm9pZD46OnR5cGUgCiAgICBEZXN0cnVjdChVICppdGVtKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfY29udmVydGlibGU8VSxUPjo6dmFsdWUsIHZvaWQ+Ojp0eXBlIAogICAgRGVzdHJ1Y3QoVSAqaXRlbSkgPSBkZWxldGU7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgp0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnZlcnRpYmxlPFUsVD46OnZhbHVlLCB2b2lkPjo6dHlwZSAKICBSZWZDb3VudGVkUmVjeWNsZTxUPjo6RGVzdHJ1Y3QoVSAqaXRlbSkKewogIGF1dG8gcCA9IHN0YXRpY19jYXN0PFQqPihpdGVtKTsKICBwLT5SZWN5Y2xlKCk7Cn0KCmludCBtYWluKCkKewogICAgcmV0dXJuIDA7Cn0=