struct sometype
{
template < typename T>
T* get( ) { return nullptr; }
} ;
template < typename T>
struct anothertype
{
#if 1
template < typename T2> struct some_wrapper { typedef T2 type; } ;
typedef typename some_wrapper< sometype> :: type thetype;
#else
typedef sometype thetype;
#endif
typedef thetype* Ptr;
Ptr m_ptr;
T* get( ) { return m_ptr- > get< T> ( ) ; }
} ;
c3RydWN0IHNvbWV0eXBlCnsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgVCogZ2V0KCkgeyByZXR1cm4gbnVsbHB0cjsgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBhbm90aGVydHlwZQp7CiNpZiAxCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDI+IHN0cnVjdCBzb21lX3dyYXBwZXIgeyB0eXBlZGVmIFQyIHR5cGU7IH07CiAgICB0eXBlZGVmIHR5cGVuYW1lIHNvbWVfd3JhcHBlcjxzb21ldHlwZT46OnR5cGUgdGhldHlwZTsKI2Vsc2UKICAgIHR5cGVkZWYgc29tZXR5cGUgdGhldHlwZTsKI2VuZGlmCiAgICB0eXBlZGVmIHRoZXR5cGUqIFB0cjsKCiAgICBQdHIgbV9wdHI7CiAgICBUKiBnZXQoKSB7IHJldHVybiBtX3B0ci0+Z2V0PFQ+KCk7IH0KfTs=