#include <iostream>
template <typename T>
struct is_pointer_type
{
enum { value = false };
};
template <typename T>
struct is_pointer_type<T*>
{
enum { value = true };
};
template <typename T>
bool is_pointer(const T&)
{
return is_pointer_type<T>::value;
}
class A{};
int main()
{
A a;
A* aptr;
std::cout << is_pointer(a) << '\n' << is_pointer(aptr) << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19wb2ludGVyX3R5cGUKewogICAgZW51bSB7IHZhbHVlID0gZmFsc2UgfTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgaXNfcG9pbnRlcl90eXBlPFQqPgp7CiAgICBlbnVtIHsgdmFsdWUgPSB0cnVlIH07Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KYm9vbCBpc19wb2ludGVyKGNvbnN0IFQmKQp7CiAgICByZXR1cm4gaXNfcG9pbnRlcl90eXBlPFQ+Ojp2YWx1ZTsKfSAKCmNsYXNzIEF7fTsKCmludCBtYWluKCkKewoJQSBhOwoJQSogYXB0cjsKCXN0ZDo6Y291dCA8PCBpc19wb2ludGVyKGEpIDw8ICdcbicgPDwgaXNfcG9pbnRlcihhcHRyKSA8PCAnXG4nOwp9