#include <iostream>
#include <type_traits>
using namespace std;
template <typename T>
class TWeakObjectPtr {
public:
T* Get(bool) { return nullptr; }
};
int main() {
TWeakObjectPtr<int> foo;
if (is_same<remove_pointer_t<decltype(foo.Get(bool()))>, int>::value) {
//if (is_same<result_of_t<decltype(&(decltype(foo)::Get))(decltype(foo)&)>, int*>::value) {
cout << "true" << endl;
}
else {
cout << "false" << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFRXZWFrT2JqZWN0UHRyIHsKcHVibGljOgoJVCogR2V0KGJvb2wpIHsgcmV0dXJuIG51bGxwdHI7IH0KfTsKCmludCBtYWluKCkgewoJVFdlYWtPYmplY3RQdHI8aW50PiBmb287CgoJaWYgKGlzX3NhbWU8cmVtb3ZlX3BvaW50ZXJfdDxkZWNsdHlwZShmb28uR2V0KGJvb2woKSkpPiwgaW50Pjo6dmFsdWUpIHsKCS8vaWYgKGlzX3NhbWU8cmVzdWx0X29mX3Q8ZGVjbHR5cGUoJihkZWNsdHlwZShmb28pOjpHZXQpKShkZWNsdHlwZShmb28pJik+LCBpbnQqPjo6dmFsdWUpIHsKCQljb3V0IDw8ICJ0cnVlIiA8PCBlbmRsOwoJfQoJZWxzZSB7CgkJY291dCA8PCAiZmFsc2UiIDw8IGVuZGw7Cgl9CgoJcmV0dXJuIDA7Cn0=