#include <typeinfo>
#include <iostream>
class T
{
virtual void foo() = 0;
};
int main() {
int* pY1 = 0;
const int* pY2 = 0;
std::cout << "pY1: " << typeid(pY1).name() << std::endl;
std::cout << "pY2: " << typeid(pY2).name() << std::endl;
std::cout << "*pY1: " << typeid(*pY1).name() << std::endl;
std::cout << "*pY2: " << typeid(*pY2).name() << std::endl;
//*pY1 = 0;
//*pY2 = 0; //error
int x1 = 0;
const int x2 = 0;
std::cout << " x1: " << typeid(x1).name() << std::endl;
std::cout << " x2: " << typeid(x2).name() << std::endl;
int z1 = 0;
const int z2 = 0;
std::cout << "&z1: " << typeid(&z1).name( ) << std::endl;
std::cout << "&z2: " << typeid(&z2).name( ) << std::endl;
int* pZ1 = &z1;
const int* pZ2 = &z2;
std::cout << "pZ1: " << typeid(pZ1).name( ) << std::endl;
std::cout << "pZ2: " << typeid(pZ2).name( ) << std::endl;
int data1 = 0;
int* const w1 = &data1;
int data2 = 0;
const int* w2 = &data2;
std::cout << "w1: " << typeid(w1).name( ) << std::endl;
std::cout << "*w1: " << typeid(*w1).name( ) << std::endl;
std::cout << "w2: " << typeid(w2).name( ) << std::endl;
std::cout << "*w2: " << typeid(*w2).name( ) << std::endl;
T* a;
// T b; //error
return 0;
}
I2luY2x1ZGUgPHR5cGVpbmZvPgojaW5jbHVkZSA8aW9zdHJlYW0+CgpjbGFzcyBUCnsKCXZpcnR1YWwgdm9pZCBmb28oKSA9IDA7Cn07CgppbnQgbWFpbigpIHsKCWludCogcFkxID0gMDsKCWNvbnN0IGludCogcFkyID0gMDsKCQoJc3RkOjpjb3V0IDw8ICJwWTE6ICIgPDwgdHlwZWlkKHBZMSkubmFtZSgpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAicFkyOiAiIDw8IHR5cGVpZChwWTIpLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgIipwWTE6ICIgPDwgdHlwZWlkKCpwWTEpLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgIipwWTI6ICIgPDwgdHlwZWlkKCpwWTIpLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CgkKCS8vKnBZMSA9IDA7CgkvLypwWTIgPSAwOyAvL2Vycm9yCgkKCWludCB4MSA9IDA7Cgljb25zdCBpbnQgeDIgPSAwOwoJCglzdGQ6OmNvdXQgPDwgIiB4MTogIiA8PCB0eXBlaWQoeDEpLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgIiB4MjogIiA8PCB0eXBlaWQoeDIpLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CgkKCWludCB6MSA9IDA7Cgljb25zdCBpbnQgejIgPSAwOwoJCglzdGQ6OmNvdXQgPDwgIiZ6MTogIiA8PCB0eXBlaWQoJnoxKS5uYW1lKCApIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiJnoyOiAiIDw8IHR5cGVpZCgmejIpLm5hbWUoICkgPDwgc3RkOjplbmRsOwoJCglpbnQqIHBaMSA9ICZ6MTsKCWNvbnN0IGludCogcFoyID0gJnoyOwoKCXN0ZDo6Y291dCA8PCAicFoxOiAiIDw8IHR5cGVpZChwWjEpLm5hbWUoICkgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8ICJwWjI6ICIgPDwgdHlwZWlkKHBaMikubmFtZSggKSA8PCBzdGQ6OmVuZGw7CgkKCWludCBkYXRhMSA9IDA7CglpbnQqIGNvbnN0IHcxID0gJmRhdGExOwogICAgaW50IGRhdGEyID0gMDsKCWNvbnN0IGludCogdzIgPSAmZGF0YTI7CglzdGQ6OmNvdXQgPDwgIncxOiAiIDw8IHR5cGVpZCh3MSkubmFtZSggKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgIip3MTogIiA8PCB0eXBlaWQoKncxKS5uYW1lKCApIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAidzI6ICIgPDwgdHlwZWlkKHcyKS5uYW1lKCApIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiKncyOiAiIDw8IHR5cGVpZCgqdzIpLm5hbWUoICkgPDwgc3RkOjplbmRsOwoJCglUKiBhOwovLwlUIGI7IC8vZXJyb3IKCQoJcmV0dXJuIDA7Cn0=